标签: mapping-model

如何使iPhone应用程序容忍CoreData架构更改

我有一个广泛使用CoreData API的应用程序.我正在开发一个更新版本,为实体添加一些字段.由于架构更改,我的应用程序在加载时崩溃(除非我吹掉私有存储并重新启动).

问题是当客户升级到新版本时,我不介意在第一次加载应用程序时对其数据运行升级程序,但我甚至无法加载它,因为CoreData不喜欢架构更改.

有没有办法告诉CoreData"它确定..不要担心架构更改"?因为我只添加了字段而没有重命名或删除任何内容.

iphone core-data mapping-model

3
推荐指数
1
解决办法
1437
查看次数

核心数据迁移映射模型的问题

我有一个使用Core Data进行存储的iPhone应用程序.我已经成功部署了它,现在我正在开发第二个版本.我遇到了数据模型的问题,在持久性存储升级时需要一些非常简单的数据转换,所以我不能只使用默认的推断映射模型.

我的对象模型存储在.xcdatamodeld包中,版本1.0和1.1彼此相邻.版本1.1设置为活动版本.当我使用默认迁移行为并将NSInferMappingModelAutomaticallyOption设置为YES时,一切正常.我的sqlite存储从模型的1.0版本升级,一切都很好,当然,除了我需要做的少量转换.

作为额外的实验步骤,我向核心数据模型包添加了一个新的映射模型,并且没有对xcode生成的内容进行任何更改.当我运行我的应用程序(使用旧版本的数据存储)时,我得到以下内容

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Object's persistent store is not reachable from this NSManagedObjectContext's coordinator'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?这是我获取托管对象模型和持久性存储协调器的代码.

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"gti_store.sqlite"]];

    NSError *error;
    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]) {
        NSLog(@"Eror creating persistent store coodinator - %@", …
Run Code Online (Sandbox Code Playgroud)

iphone core-data mapping-model

1
推荐指数
1
解决办法
3655
查看次数

即使添加映射模型后,CoreData 轻量级迁移也会崩溃

在我的 CoreData 模型中,我创建了一个抽象实体 ( IDManagedObject) 来共享其他实体的公共属性。

当我第一次运行它时,我遇到了几个Cannot merge multiple root entity source tables into one destination entity root table错误。

完整错误如下:

Fatal error: Unresolved error Error Domain=NSCocoaErrorDomain Code=134110 "An error occurred during persistent store migration." UserInfo={sourceURL=file:///Users/koen/Library/Developer/CoreSimulator/Devices/8E2C0F01-ABF3-4414-A01A-EE4FFEF8D187/data/Containers/Data/Application/B7A9A4EE-EB57-434F-B1A9-576DCD80CFBD/Library/Application%20Support/MyApp.sqlite, reason=Cannot migrate store in-place: Cannot merge multiple root entity source tables into one destination entity root table, destinationURL=file:///Users/koen/Library/Developer/CoreSimulator/Devices/8E2C0F01-ABF3-4414-A01A-EE4FFEF8D187/data/Containers/Data/Application/B7A9A4EE-EB57-434F-B1A9-576DCD80CFBD/Library/Application%20Support/MyApp.sqlite, NSUnderlyingError=0x6000019fb810 {Error Domain=NSCocoaErrorDomain Code=134110 "An error occurred during persistent store migration." UserInfo={message=Cannot merge multiple root entity source tables into one destination entity root table, …
Run Code Online (Sandbox Code Playgroud)

core-data ios mapping-model cloudkit

1
推荐指数
1
解决办法
940
查看次数

核心数据:具有自引用属性的迁移实体

My Core Data模型包含一个实体Shape,它有两个自引用关系,这意味着四个属性.一对是一对多关系(Shape.containedBy < - >> Shape.contains),另一对是多对多关系(Shape.nextShapes << - >> Shape.previousShapes).这一切都在应用程序中完美运行,因此我不认为自引用关系通常是一个问题.

但是,在将模型迁移到新版本时,Xcode无法编译自动生成的映射模型,并显示以下错误消息:

2009-10-30 17:10:09.387 mapc[18619:607] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse the format string "FUNCTION($manager ,'destinationInstancesForSourceRelationshipNamed:sourceInstances:' , 'contains' , $source.contains) == 1"'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00007fff80d735a4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x00007fff83f0a313 objc_exception_throw + 45
    2   Foundation                          0x00007fff819bc8d4 _qfqp2_performParsing + 8412
    3   Foundation                          0x00007fff819ba79d +[NSPredicate predicateWithFormat:arguments:] + 59
    4   Foundation                          0x00007fff81a482ef +[NSExpression expressionWithFormat:arguments:] + 68
    5   Foundation                          0x00007fff81a48843 …
Run Code Online (Sandbox Code Playgroud)

cocoa core-data core-data-migration self-reference mapping-model

0
推荐指数
1
解决办法
1272
查看次数