如果启用iCloud,则会崩溃(链接到与核心数据同步)

时间:2013-03-10 05:25:24

标签: ios core-data icloud

这是我在init中用于存储类的代码,直到最近才运行良好..当我尝试测试时,它在addPersistentStoreWithType崩溃(标记如下)...我在切换到iPhone 5之后注意到了这一点试图运行应用程序...但如果我在手机上关闭icloud或在模拟器上测试它没有问题......

-(id)init
{
    self = [super init];
    if(self)
    {
        NSLog(@"%s", __FUNCTION__);
        favColors = [[NSMutableArray alloc] init];
        model = [NSManagedObjectModel mergedModelFromBundles:nil];
        NSPersistentStoreCoordinator *psc = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
        NSString *path = [self itemArchivePath];
        NSURL *storeURL = [NSURL fileURLWithPath:path];
        NSError *error = nil;
        NSMutableDictionary *options = [NSMutableDictionary dictionary];

        NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];
        if (ubiq) {
            NSLog(@"iCloud access at %@", ubiq);
            [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(contentChange:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:nil];
            NSFileManager *fm = [NSFileManager defaultManager];
            NSURL *ubcontainer = [fm URLForUbiquityContainerIdentifier:nil];
            [options setObject:@"color" forKey:NSPersistentStoreUbiquitousContentNameKey];
            [options setObject:ubcontainer forKey:NSPersistentStoreUbiquitousContentURLKey];

        } else {
            NSLog(@"No iCloud access");
        }
   // ************ Crash here **************
        if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:(ubiq?options:nil) error:&error]) {
            [NSException raise:@"Open failed" format:@"Reason: %@", [error localizedDescription]];
        }
        context = [[NSManagedObjectContext alloc] init];
        [context setPersistentStoreCoordinator:psc];
        [context setUndoManager:nil];

        [self loadAllItems];
    }
    return self;
}

- (NSString *)itemArchivePath
{
    NSArray *documentDirectories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentDirectory = [documentDirectories objectAtIndex:0];
    return [documentDirectory stringByAppendingPathComponent:@"store.data"];
}

此外,如果我运行应用程序一次并在崩溃后关闭icloud并再次运行应用程序..数据从icloud中检索...并在应用程序上显示。

输出日志显示了这一点。

  

iCloud访问文件:// localhost / private / var / mobile / Library / Mobile%20Documents / xxx   -PFUbiquitySetupAssistant performPreStoreSetupWithError :: CoreData:Ubiquity:   基线文件存在,但无法读取

1 个答案:

答案 0 :(得分:2)

这是内部的iCloud错误。这不是你的错,在代码中你无法做任何事情来修复或阻止它。它将随机发生,没有可预测的时间或原因模式。不幸的是,删除应用程序的数据是唯一真正的解决方案。这样做只会删除iCloud的数据副本,而不会删除存储在应用程序的Documents目录或其他非iCloud位置的数据,因此旧数据仍然存在并不奇怪。