iOS 5.1 openWith CompletionHandler没有成功

时间:2013-02-26 19:41:31

标签: core-data ios6 ios5.1 uimanageddocument

我试图让我的iOS6.0应用程序与5.1兼容。我已经关闭了显而易见的事情(例如自动布局)但是我陷入了一个奇怪的阶段。

我的应用程序从XML源获取数据并将其置于核心日期结构中。在iOS 6上,这非常有效。在iOS 5上它被卡在这里

else if (self.dataStorage.documentState == UIDocumentStateClosed) {
   NSLog(@"THIS FIRES = db on disk but closed");
   [self.dataStorage openWithCompletionHandler:^(BOOL success) {
      NSLog(@"THIS NEVER FIRES");
    }];
}

如果我查看self.datastorage,它就是我所期望的(一个封闭的托管文档)fileURL:file:// localhost / ..... / Library / Application%20Support/iPhone%20Simulator/5.1/Applications/ E3E9192D-2DFE-4882-9041-00A1DF9E98D6 / Documents / Default%20Database documentState:[Closed]

编辑:实际上适用于iOS 5.0或6.0+。我的问题纯粹是在iPhone模拟器上运行iOS 5.1。这可能只是模拟器的错误吗?它不会打开已关闭的UIManagedDocument,也不会创建不存在的文件。

以下是完整性的完整代码:

- (void)setDataStorage:(UIManagedDocument *)database
{
   if (_dataStorage != database) {
      _dataStorage = database;
      [self useDocument];
    }
}

-(UIManagedDocument*) initialiseDatabase {
  if (!self.dataStorage) {  
    NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
    url = [url URLByAppendingPathComponent:@"DefaultDatabase"];
    self.dataStorage = [[UIManagedDocument alloc] initWithFileURL:url]; // setter will create this for us on disk
  }
  return self.dataStorage;
}
- (void)useDocument {
  if (![[NSFileManager defaultManager] fileExistsAtPath:[self.dataStorage.fileURL path]]) {
    // does not exist on disk, so create it
    NSLog(@"db not on disk");
    [self.dataStorage saveToURL:self.dataStorage.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
       NSLog(@"Doesn't fire");
      }];
} else if (self.dataStorage.documentState == UIDocumentStateClosed) {
    NSLog(@"db on disk but closed");
    // exists on disk, but we need to open it
    [self.dataStorage openWithCompletionHandler:^(BOOL success) {
        NSLog(@"Doesn't fire");
    }];
} else if (self.dataStorage.documentState == UIDocumentStateNormal) {
    NSLog(@"db on disk and open");
}
}

由于

1 个答案:

答案 0 :(得分:2)

现在我已经更详细地发现了这个问题,很多人之前就已经问过这个问题了。 可悲的是,从来没有一个令人满意的解决方案。但是,它只是模拟器的一个问题/错误,对于真实设备应该不是问题(正如我在5.1 iPad上测试所证实的那样)。