Core data iOS 5.1 openWithCompletionHandler未成功
我正在尝试使我的iOS6.0应用程序与5.1兼容。我已经关掉了一些显而易见的东西(例如自动布局),但我却陷入了一个奇怪的阶段 我的应用程序从XML源获取数据,并将其放入核心日期结构中。在iOS 6上,这非常有效。在iOS 5上,它会卡在这里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
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上的测试所证实的)