3

我遇到了一个奇怪的问题。我确信我在代码中的其他地方对文件做了一些事情并且它没有正确关闭或其他什么,但现在它处于报告为已关闭的状态,但是当我调用 OpenWithCompletionHandler 它永远不会返回。见下文:

   //if the file is closed, open it and then set up the controller
    if (file.documentState == UIDocumentStateClosed){
        //---- this code executes        
        [file openWithCompletionHandler:^(BOOL success){
           // ---- this code NEVER executes
        }];
    }

有任何想法吗?

4

2 回答 2

0

我遇到了同样的问题。

您是否尝试在 viewDidLoad 中打开文档?

尝试将代码移动到另一种方法。它为我解决了这个问题。

在 ViewController.h

@property (nonatomic,strong) NSManagedObjectContext *managedObjectContext;
@property (nonatomic,strong) UIManagedDocument *document;

在 ViewController.m

@synthesize managedObjectContext = _managedObjectContext;
@synthesize document = _document;

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Do not try to open the document here
    // Call another method instead :D
    if (!_managedObjectContext) {
        [self createContext];
    }
}

- (void)createContext
{
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSURL *url = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"Database"];

    self.document = [[UIManagedDocument alloc] initWithFileURL:url];

    // FILE DOES NOT EXIST - Let's create a new one    
    if (![[NSFileManager defaultManager] fileExistsAtPath:[url path]]) {
        [self.document saveToURL:url forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
            if (success) {
                self.managedObjectContext = self.document.managedObjectContext;
            } else {
                NSLog(@"ERROR: Cannot create new document");
            }
        }];

    // FILE IS CLOSED - Let's open it
    } else if (self.document.documentState == UIDocumentStateClosed) {
        [self.document openWithCompletionHandler:^(BOOL success) {
            if (success) {
                self.managedObjectContext = self.document.managedObjectContext;
            } else {
                NSLog(@"File is closed and it wont open!");
            }
        }];

    // FILE EXISTS AND IS OPENED - Yay!
    } else {
        self.managedObjectContext = self.document.managedObjectContext;
    }
}
于 2013-11-17T16:57:25.463 回答
0

请参阅使用 UIManagedDocument 的 iPhone Simulator 5.1 和 Xcode 4.5 中的错误

我的解决方案与报告的相同,但我不得不将我的应用程序的部署目标降低到 iOS 5.0,以便“iPhone 5.0 模拟器”可用作运行目标。我只看到这个问题试图将 iPhone 5.1 模拟器与 XCode 4.5.2 一起使用,5.0 和 6.0 模拟器都可以工作。

于 2013-01-13T20:47:57.517 回答