为什么我的应用在尝试保存到核心数据时崩溃?

问题描述:

我试图让我的应用程序保存到核心数据在AppDelegate.swift但在退出应用程序,它与此日志在控制台崩溃:为什么我的应用在尝试保存到核心数据时崩溃?

2015-04-04 22:04:38.043 myapp[14882:714850] CoreData: error: -addPersistentStoreWithType:SQLite configuration:(null) URL:file:///Users/kiancross/Library/Developer/CoreSimulator/Devices/59D353AF-8C56-42D6-8B35-9F51FE04D1BC/data/Containers/Data/Application/66D76678-B819-4B01-8172-6324BB5D2E7B/Documents/myappsqlite options:(null) ... returned error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x7fc453dcb120 {metadata={ 
    NSPersistenceFrameworkVersion = 519; 
    NSStoreModelVersionHashes =  { 
     SavedData = <f13dc99c 2ebf5dd2 a89322cb 537a0f94 361477df 04077315 5954c0b5 afd3f9a1>; 
    }; 
    NSStoreModelVersionHashesVersion = 3; 
    NSStoreModelVersionIdentifiers =  (
     "" 
    ); 
    NSStoreType = SQLite; 
    NSStoreUUID = "E748E18D-F898-4AC1-96A4-7F8F1925D369"; 
    "_NSAutoVacuumLevel" = 2; 
}, reason=The model used to open the store is incompatible with the one used to create the store} with userInfo dictionary { 
    metadata =  { 
     NSPersistenceFrameworkVersion = 519; 
     NSStoreModelVersionHashes =   { 
      SavedData = <f13dc99c 2ebf5dd2 a89322cb 537a0f94 361477df 04077315 5954c0b5 afd3f9a1>; 
     }; 
     NSStoreModelVersionHashesVersion = 3; 
     NSStoreModelVersionIdentifiers =   (
      "" 
     ); 
     NSStoreType = SQLite; 
     NSStoreUUID = "E748E18D-F898-4AC1-96A4-7F8F1925D369"; 
     "_NSAutoVacuumLevel" = 2; 
    }; 
    reason = "The model used to open the store is incompatible with the one used to create the store"; 
} 
2015-04-04 22:04:38.047 myapp[14882:714850] Unresolved error Optional(Error Domain=YOUR_ERROR_DOMAIN Code=9999 "Failed to initialize the application's saved data" UserInfo=0x7fc453dcce00 {NSLocalizedDescription=Failed to initialize the application's saved data, NSLocalizedFailureReason=There was an error creating or loading the application's saved data., NSUnderlyingError=0x7fc453db2360 "The operation couldn’t be completed. (Cocoa error 134100.)"}), Optional([NSLocalizedDescription: Failed to initialize the application's saved data, NSLocalizedFailureReason: There was an error creating or loading the application's saved data., NSUnderlyingError: Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0x7fc453dcb120 {metadata={ 
    NSPersistenceFrameworkVersion = 519; 
    NSStoreModelVersionHashes =  { 
     SavedData = <f13dc99c 2ebf5dd2 a89322cb 537a0f94 361477df 04077315 5954c0b5 afd3f9a1>; 
    }; 
    NSStoreModelVersionHashesVersion = 3; 
    NSStoreModelVersionIdentifiers =  (
     "" 
    ); 
    NSStoreType = SQLite; 
    NSStoreUUID = "E748E18D-F898-4AC1-96A4-7F8F1925D369"; 
    "_NSAutoVacuumLevel" = 2; 
}, reason=The model used to open the store is incompatible with the one used to create the store}]) 

是在我AppDelegate.swift是引发此错误的代码:

func applicationDidEnterBackground(application: UIApplication) { 
     // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 


     let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate 
     let managedContext = appDelegate.managedObjectContext! 

     let entity = NSEntityDescription.entityForName("SavedData", inManagedObjectContext: managedContext) 


     let managedObject = NSManagedObject(entity: entity!, insertIntoManagedObjectContext:managedContext) 

     managedObject.setValue(sharedData.jsonUrl, forKey: "jsonUrl") 

     var error: NSError? 
     if !managedContext.save(&error) { 
      println("Could not save \(error), \(error?.userInfo)") 
     } 

    } 

这是在我的CoreData模型;你可以看到下面的屏幕截图:

core data screen shot

正如你可以看到它的一切,应该有它。

我的问题是我的代码的哪一部分导致这次崩溃?我遵循this关于在应用程序中实现CoreData的教程,我几乎肯定我已经尽可能地遵循它来适应我的应用程序需求。

谢谢

+1

查看[this](http://*.com/q/8078337/3985749)问题/答案。最简单的修复就是删除应用程序并重新运行。 – pbasdf 2015-04-04 21:46:39

我不是很肯定,但你的错误的最后一行说:reason=The model used to open the store is incompatible with the one used to create the store}])这意味着coredata的数据模型是不一样的,你正在使用的一个。

只需删除应用程序(应用程序图标上的LongPress并将其删除)并再次运行,至少可以解决该问题。

一个更好的解释是here

从模拟器中删除应用程序,您的项目执行干净。这应该解决这些问题。确保在删除应用程序时没有在调试器中运行,否则它不会正确删除它。

如果你想确定它已经没有了,请在你运行的版本下检查这个目录的用户/ INSERT_YOUR_USER_HERE/Library/Application Support/iPhone Simulator /用于你的应用程序的文件夹。

注意:这仅用于开发。为了生产,你需要实施某种迁移。谷歌“核心数据迁移”,轻量级迁移是最简单的。“