我试图让我的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");
}
}
由于
答案 0 :(得分:2)
现在我已经更详细地发现了这个问题,很多人之前就已经问过这个问题了。 可悲的是,从来没有一个令人满意的解决方案。但是,它只是模拟器的一个问题/错误,对于真实设备应该不是问题(正如我在5.1 iPad上测试所证实的那样)。