Core data iOS 5.1 openWithCompletionHandler未成功

Core data iOS 5.1 openWithCompletionHandler未成功,core-data,ios6,ios5.1,uimanageddocument,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.dat

我正在尝试使我的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,它就是我所期望的(一个封闭的托管文档)文件URL:file://localhost/ ..... /库/应用程序%20Support/iPhone%20Simulator/5.1/Applications/E3E9192D-2DFE-4882-9041-00A1DF9E98D6/Documents/Default%20数据库文档状态:[已关闭]

编辑:实际上在iOS 5.0或6.0+上运行良好。我的问题纯粹是在iPhone模拟器上运行iOS 5.1。这可能只是模拟器的一个bug吗?它不会打开已关闭的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");
}
}

谢谢

现在我更详细地确定了这个问题,似乎很多人以前都问过这个问题。 可悲的是,从来没有一个令人满意的解决方案。然而,这只是模拟器的一个问题/缺陷,对于真正的设备来说不应该是一个问题(正如我在5.1 iPad上的测试所证实的)