【问题标题】:cocoa error 134100 again - (Model used to open is incompatible from model used to create...)可可错误 134100 再次 - (用于打开的模型与用于创建的模型不兼容...)
【发布时间】:2011-10-18 22:22:58
【问题描述】:

我在这里看到过这个问题,但总是,答案是模型已更改,重置模拟器,删除商店。

我也收到此错误,但是,这是一个新应用程序。我没有添加/更改实体或属性。

我已经删除了商店,我已经重置了模拟器,但我得到了相同的结果。

这是商店代码。。这个问题还有其他原因吗?

- (NSManagedObjectModel *)managedObjectModel {
   //  NSLog(@"%s", __FUNCTION__);
    if (managedObjectModel_ != nil) {
        return managedObjectModel_;
    }

    NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Lexicon" ofType:@"momd"];
    NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
    managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
    return managedObjectModel_;
}

/**
 Returns the persistent store coordinator for the application.
 If the coordinator doesn't already exist, it is created and the application's store added to it.
 */
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

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

    NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"dict.sqlite"]];

    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator_;
}

这是控制台喷出:

2011-08-03 11:42:38.936 词典[4468:f203] -[AppDelegate 应用程序:didFinishLaunchingWithOptions:] 2011-08-03 11:42:38.989 词典[4468:f203] -[AppDelegate applicationDocumentsDirectory] 2011-08-03 11:42:39.048 Lexicon [4468:f203] 未解决的错误错误 Domain=NSCocoaErrorDomain Code=134100 "无法执行该操作 完全的。 (可可错误 134100。)“用户信息 = 0x6d3ee60 {metadata={type = 不可变字典, 计数 = 7,条目 => 2:{内容 = “NSStoreModelVersionIdentifiers”} = {type = immutable, count = 1, values = ( 0 : {length = 0, capacity = 0, bytes = 0x})} 4 : {内容= “NSPersistenceFrameworkVersion”} = {值 = +363,类型 = kCFNumberSInt64Type} 6:{内容 = “NSStoreModelVersionHashes”} = {type = 不可变字典,count = 1, 条目 => 0 : {内容 = "词典实体"} = {长度 = 32, 容量 = 32,字节 = 0x8698c5295fa5124b78a6b127bba26ff0 ... 70eaece0517cd4c6} }

7 : {contents = "NSStoreUUID"} = {内容= “86B22D58-28A5-4585-8650-07111B34B43A”} 8:{contents = “NSStoreType”} = {contents = “SQLite”} 9:{contents = “_NSAutoVacuumLevel”} = {contents = “2”} 10:{contents = "NSStoreModelVersionHashesVersion"} = {值 = +3,类型 = kCFNumberSInt32Type} } , reason=开店的型号是 与用于创建商店的不兼容},{ 元数据 = { NSPersistenceFrameworkVersion = 363; NSStoreModelVersionHashes = { 词典实体 = ; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( ); NSStoreType = SQLite; NSStoreUUID = "86B22D58-28A5-4585-8650-07111B34B43A"; "_NSAutoVacuumLevel" = 2; }; reason = "开店的机型不兼容 用于创建商店的那个”;}

【问题讨论】:

    标签: iphone xcode cocoa-touch core-data


    【解决方案1】:

    事实证明,sqlite 数据库存储构建不正确。因此,在这种情况下,消息相当准确。

    上面的问题是真实的。数据库未反映模型。

    解决方案是让 Core Data 从模型中创建空数据库,然后让 Core Data 自己导入数据。

    我首先将我的 sqlite 数据库导出到 sql,调用文件 db.sql(想象力丰富!)。我只导出了数据表和主键表,没有导出元数据表。为此,我使用了一个名为 SQLiteManager 的应用程序。您也可以在命令行中执行此操作。

    除了处理 Persistent Store Controller 之外,所有代码都是库存的东西。

    该代码如下:

    - (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    
        if (persistentStoreCoordinator_ != nil) {
            return persistentStoreCoordinator_;
        }
    
    
        NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"db.sql"];
    
        // set up the backing store
        NSFileManager *fileManager = [NSFileManager defaultManager];
        // If the expected store doesn't exist, copy the default store.
        if (![fileManager fileExistsAtPath:storePath]) {
            NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"dict" ofType:@"sqlite"];
            if (defaultStorePath) {
                [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
            }
        }
    
        NSURL *storeURL = [NSURL fileURLWithPath:storePath];
    
        NSError *error = nil;
        persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
        if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
    
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }    
    
        return persistentStoreCoordinator_;
    }
    

    我希望这会有所帮助..它似乎对我有用..

    【讨论】:

      猜你喜欢
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2014-11-29
      • 2020-10-14
      • 1970-01-01
      相关资源
      最近更新 更多