我刚刚创建了icloud集成核心数据应用程序,它在正常情况下可以正常工作,但是在没有互联网连接的情况下首次启动应用程序时,我在IOS 6上遇到了奇怪的问题。应用程序停止响应。
我已经控制了我的代码,并在谷歌上查看了几乎所有与此问题相关的主题,但我找不到任何答案。
我在开发人员门户上发布的 WWDC 2012 iCloud 和核心数据示例代码 (SharedCoreData) 上也遇到了完全相同的问题。
在苹果的示例代码中,我一直在追踪这个问题,直到“addPersistentStoreWithType”。
您可以在下面找到发生冻结的部分苹果代码,坦率地说,由于苹果的版权问题,我不愿分享所有代码。
但这就是, (BOOL)loadiCloudStore: 已经从另一个线程调用,所以实际上没有线程问题,只是在调用“managedObjectContext”时发生冻结。
那么,你们知道为什么“addPersistentStoreWithType”在没有互联网连接的情况下首次启动时停止响应吗?
- (BOOL)loadiCloudStore:(NSError * __autoreleasing *)error {
BOOL success = YES;
NSError *localError = nil;
NSFileManager *fm = [[NSFileManager alloc] init];
_ubiquityURL = [fm URLForUbiquityContainerIdentifier:nil];
NSURL *iCloudStoreURL = [self iCloudStoreURL];
NSURL *iCloudDataURL = [self.ubiquityURL URLByAppendingPathComponent:@"iCloudData"];
NSDictionary *options = @{ NSPersistentStoreUbiquitousContentNameKey : @"iCloudStore",
NSPersistentStoreUbiquitousContentURLKey : iCloudDataURL };
//after that point thread freeze
_iCloudStore = [self.psc addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"CloudConfig"
URL:iCloudStoreURL
options:options
error:&localError];
success = (_iCloudStore != nil);
if (success) {
//set up the file presenter
_presentedItemURL = iCloudDataURL;
[NSFileCoordinator addFilePresenter:self];
} else {
if (localError && (error != NULL)) {
*error = localError;
}
}
return success;
}