无法创建持久化存储协调器。

3

我遇到了以下错误:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyExprojectception', reason: 'Managed object store failed to create persistent store coordinator: Error Domain=NSCocoaErrorDomain Code=134130 "The operation couldn’t be completed. (Cocoa error 134130.)" UserInfo=0x6eb53f0 {URL=/Users/user/Library/Application Support/iPhone Simulator/4.3.2/Applications/4EFD7570-AD87-48E8-8606-1D5633F65AD9/Documents/DiscussionBoard.sqlite, metadata=<CFBasicHash 0x6e7b610 [0x1957400]>{type = immutable dict, count = 7,
entries =>
    2 : <CFString 0x6e7bc80 [0x1957400]>{contents = "NSStoreModelVersionIdentifiers"} = <CFArray 0x6e7bd60 [0x1957400]>{type = immutable, count = 1, values = (
    0 : <CFString 0x194eed0 [0x1957400]>{contents = ""}
)}
    4 : <CFString 0x6e7bcb0 [0x1957400]>{contents = "NSPersistenceFrameworkVersion"} = <CFNumber 0x6e7b820 [0x1957400]>{value = +320, type = kCFNumberSInt64Type}
    6 : <CFString 0x6e7bce0 [0x1957400]>{contents = "NSStoreModelVersionHashes"} = <CFBasicHash 0x6e7c310 [0x1957400]>{type = immutable dict, count = 13,
entries =>
    0 : <CFString 0x6e7bd80 [0x1957400]>{contents = "CVImage"} = <CFData 0x6e7bf00 [0x1957400]>{length = 32, capacity = 32, bytes = 0xbd556295681226e6b1fd6142e2e7bfcc ... e38b423dd3965969}
    2 : <CFString 0x6e7bda0 [0x1957400]>{contents = "CVMembers"} = <CFData 0x6e7bf50 [0x1957400]>{length = 32, capacity = 32, bytes = 0xa3d504782e9111ed01b1c02575c48119 ... 1bd1d59e42507652}
    4 : <CFString 0x6e7bdc0 [0x1957400]>{contents = "CVMessages"} = <CFData 0x6e7bfa0 [0x1957400]>{length = 32, capacity = 32, bytes = 0xfbd5da9b0fc0ea188505807aea912e83 ... e3a42fa8fbdf416c}
    8 : <CFString 0x6e7bde0 [0x1957400]>{contents = "CVEmbed"} = <CFData 0x6e7bff0 [0x1957400]>{length = 32, capacity = 32, bytes = 0x5d65d864e7881875c52882a8fd709079 ... e3ad8204d4ca3de3}
    9 : <CFString 0x6e7be00 [0x1957400]>{contents = "CVGroup"} = <CFData 0x6e7c040 [0x1957400]>{length = 32, capacity = 32, bytes = 0xb2989b51004a22a8fb78971436462bcc ... 39d14fd18d892843}
    10 : <CFString 0x6e7be20 [0x1957400]>{contents = "CVImgur"} = <CFData 0x6e7c090 [0x1957400]>{length = 32, capacity = 32, bytes = 0x57cb45112309b9fce595cbee14c87e98 ... f88cd7d4eadeb9aa}
    12 : <CFString 0x6e7be40 [0x1957400]>{contents = "CVLinks"} = <CFData 0x6e7c0e0 [0x1957400]>{length = 32, capacity = 32, bytes = 0x715c27157179226a0a44cd0015b9017d ... 26a06c18c21630d3}
    13 : <CFString 0x6e7b7c0 [0x1957400]>{contents = "CVStar"} = <CFData 0x6e7c130 [0x1957400]>{length = 32, capacity = 32, bytes = 0xeaba2443e38c48975f8e1eda97788ce3 ... 6939185adf9f8bc4}
    14 : <CFString 0x6e7be60 [0x1957400]>{contents = "CVLogin"} = <CFData 0x6e7c180 [0x1957400]>{length = 32, capacity = 32, bytes = 0x3089c83eba00f29b13543cdfa16514d7 ... db609adb46524cab}
    16 : <CFString 0x6e7be80 [0x1957400]>{contents = "CVTopics"} = <CFData 0x6e7c1d0 [0x1957400]>{length = 32, capacity = 32, bytes = 0x6ba8c6c71281ae9f3731a180cb0509cb ... 3aedf32173e19adf}
    17 : <CFString 0x6e7bea0 [0x1957400]>{contents = "CVConversation"} = <CFData 0x6e7c220 [0x1957400]>{length = 32, capacity = 32, bytes = 0xac552b4d9d0a2c0425facda397d0f3c1 ... 8a7b7d36c9a14af3}
    20 : <CFString 0x6e7bec0 [0x1957400]>{contents = "CVMessage"} = <CFData 0x6e7c270 [0x1957400]>{length = 32, capacity = 32, bytes = 0x80e0118b52f9679904a359ce469b116a ... ad08d1f238e71130}
    21 : <CFString 0x6e7bee0 [0x1957400]>{contents = "CVTopic"} = <CFData 0x6e7c2c0 [0x1957400]>{length = 32, capacity = 32, bytes = 0xe1898a56a02e523bc8879e812cecd756 ... 339f8023561d35f9}
}

    7 : <CFString 0x7888b0 [0x1957400]>{contents = "NSStoreUUID"} = <CFString 0x6e7b970 [0x1957400]>{contents = "BDA8B03E-81DA-472C-8966-936DC080900F"}
    8 : <CFString 0x788720 [0x1957400]>{contents = "NSStoreType"} = <CFString 0x7888f0 [0x1957400]>{contents = "SQLite"}
    9 : <CFString 0x6e7bd10 [0x1957400]>{contents = "NSStoreModelVersionHashesVersion"} = <CFNumber 0x5f70a40 [0x1957400]>{value = +3, type = kCFNumberSInt32Type}
    10 : <CFString 0x6e7bd40 [0x1957400]>{contents = "_NSAutoVacuumLevel"} = <CFString 0x6e7c410 [0x1957400]>{contents = "2"}
}
, reason=Can't find model for source store}'

它说找不到源存储的模型?这是什么意思?

代码如下:

- (void)createPersistentStoreCoordinator {
    NSURL *storeUrl = [NSURL fileURLWithPath:self.pathToStoreFile];

    NSError *error;
    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:_managedObjectModel];

    // Allow inferred migration from the original version of the application.
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
                             [NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
                             [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
        if (self.delegate != nil && [self.delegate respondsToSelector:@selector(managedObjectStore:didFailToCreatePersistentStoreCoordinatorWithError:)]) {
            [self.delegate managedObjectStore:self didFailToCreatePersistentStoreCoordinatorWithError:error];
        } else {
            NSAssert(NO, @"Managed object store failed to create persistent store coordinator: %@", error); //fails right here
        }
    }
}

1
您还应该张贴引发此异常的代码。 - tidwall
抱歉,我之前发布了代码.. 它在 NSAssert 上失败了。 - adit
你是否尝试在谷歌上搜索这个错误短语?如果是,你尝试了些什么呢? - Toby Allen
由于我最近修改了xcdatamodeld后出现了这个错误,所以我猜我在那里犯了一些错误。 - adit
4个回答

16

我注意到你正在使用RestKit,我以前也遇到过这个问题,解决方法是删除SqlLite数据库。对我来说,是当我添加了一个新的关系时,数据库不喜欢新属性。

注意:在开发中这是可以正常工作的,但在生产环境中通常需要执行Core Data迁移,因为用户不希望丢失他们的数据(这取决于你的应用程序)。


8

是的,我同意firetoast的观点。当我从设备/模拟器中删除我的应用程序并重新安装时,问题就消失了。这种情况通常发生在我编辑核心数据模式并使用restkit进行持久化之后。


2

需要检查的事项:

  • 确保你已经正确加载了上下文,且.momd文件已经添加到你的应用程序包中
  • 确保你的实体在数据模型可视化编辑器中命名为“store”

此外,在处理CoreData时,有一个有趣的userinfo,其中包含许多有用的信息:

NSDictionary *ui = [error userInfo];
        for(NSString *err in [ui keyEnumerator]) {
            NSLog(@"err:%@",[ui objectForKey:err]);
        }

0

NSAssert是对语句是否为真进行断言的操作。通过向其传递NO,您使其始终无法通过断言检查。我假设这是为了在前面的if语句为false时强制执行硬性失败。


是的,那么我该怎么解决呢?这基本上意味着委托对象要么为nil,要么不响应我指定的选择器? - adit
我不确定 - 我以前没有遇到过这个错误。你在这里发布的是生成的代码吗?还是你自己编写或从其他来源(如库或类似物)中获取的代码? - aperkins

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接