iPhone 5s上的持久存储迁移会导致桌面视图崩溃

时间:2014-10-03 00:58:19

标签: ios iphone 64-bit ios-simulator core-data-migration

我在Xcode 6.0.1中使用iOS模拟器8.0有一个相对简单的主细节应用程序。

该应用程序使用核心数据。该应用程序仅限本地。我计划使用iCloud或Dropbox进行备份 数据,但不是同步。目前它只是本地的。

一切都有很好的例外。每次我使用模拟器并模拟iPhone 5s, 一旦我迁移商店然后访问tableview详细信息,应用程序崩溃。没有日志信息,没有错误信息, 它只是停止。对于5s手机也是如此。

如果我在iPhone 5模式下运行模拟器,或者在iPhone 4s上运行该应用程序,它可以完美运行。我读过几十本 关于核心数据和持久存储的教程和文章 - 从未听说过这个问题。

因此,64位设备上的后持久存储迁移必定存在问题。有人可以帮忙吗?

  • (void)migrateStore:(NSString *)newSQLFileName {

    //将当前商店从一个URL迁移到另一个URL //在迁移之前写出当前的商店URL NSURL * storeURL = [self.persistentStoreCoordinator.persistentStores.lastObject URL]; NSLog(@“迁移前的storeURL:%@”,[storeURL description]);

    //获取当前商店 NSPersistentStore * currentStore = self.persistentStoreCoordinator.persistentStores.lastObject;

    //创建一个新网址 NSURL * newStoreURL = [[self applicationDocumentsDirectory] ​​URLByAppendingPathComponent:newSQLFileName];

    //一旦你开始工作就添加选项词典

    //将当前商店迁移到新网址 [self.persistentStoreCoordinator migratePersistentStore:currentStore toURL:newStoreURL options:nil withType:NSSQLiteStoreType error:nil];

    //检查新商店是否处于活动状态,再次写出该URL storeURL = [self.persistentStoreCoordinator.persistentStores.lastObject URL]; NSLog(迁移后@“storeURL:%@”,[storeURL description]);

} // migrateStore:newSQLFileName

从调试日志窗口:

2014-10-02 16:35:09.274 BiopLog [31758:2509702]用户输入PIN进行验证 2014-10-02 16:35:09.277 BiopLog [31758:2509702] **用户认证!! 2014-10-02 16:35:09.389 BiopLog [31758:2509702]文档路径为:/ Users / john_grauel / Library / Developer / CoreSimulator / Devices / 25BCE099-41D2-4679-9A40-615656159E84 / data / Containers / Data /应用程序/ 39A5A3FF-CBDE-42A0-B6BA-DBC632EE0E31 /文档 2014-10-02 16:35:12.384 BiopLog [31758:2509702] storeURL迁移前:file:/// Users / john_grauel / Library / Developer / CoreSimulator / Devices / 25BCE099-41D2-4679-9A40-615656159E84 / data / Containers /Data/Application/39A5A3FF-CBDE-42A0-B6BA-DBC632EE0E31/Documents/BiopLog.sqlite 2014-10-02 16:35:12.843 BiopLog [31758:2509702] storeURL迁移后:file:/// Users / john_grauel / Library / Developer / CoreSimulator / Devices / 25BCE099-41D2-4679-9A40-615656159E84 / data / Containers /Data/Application/39A5A3FF-CBDE-42A0-B6BA-DBC632EE0E31/Documents/BiopBak201410021635.sqlite (lldb)

和设备日志包括:

Oct 2 17:42:41 Jo​​hniPhone SpringBoard [48]:应用程序'UIKitApplication:com.carbonrose.BiopLog [0x9dbb]'崩溃了。 10月2日17:42:41 Jo​​hniPhone断言[58]:pid_suspend失败:未知错误:-1,未知错误:-1 10月2日17:42:41 Jo​​hniPhone断言[58]:无法将优先级设置为2,优先级:没有这样的过程 10月2日17:42:41 Jo​​hniPhone断言[58]:无法将优先级设置为4096,优先级:没有这样的过程 10月2日17:42:41 Jo​​hniPhone UserEventAgent [17]:id = com.carbonrose.BiopLog pid = 886,state = 0 10月2日17:42:41 Jo​​hniPhone定位[55]:位置图标现在应处于“活动”状态 10月2日17:42:41 Jo​​hniPhone geod [127]:无法获得进程565的包标识符 10月2日17:42:43 JohniPhone定位[55]:手势EnabledForTopCLient:1,EnabledInDaemonSettings:0 10月2日17:42:43 JohniPhone内核[0]:xpcproxy [888]容器:/ private / var / mobile / Containers / Data / Application / EC6B60D8-510D-4E46-82B1-29891D0F4E79(sandbox) 10月2日17:42:43 JohniPhone yweather [888]:断言失败:12A405:libxpc.dylib + 71820 [4BC9CA3D-4DEE-314C-ADBF-53BDCEEFE45C]:0x7d 10月2日17:42:43 JohniPhone未知[888]: 10月2日17:42:43 JohniPhone yweather [888]:CFURLSetResourcePropertyForKey失败,因为它传递了这个没有方案的URL:/ var / mobile / Containers / Data / Application / EC6B60D8-510D-4E46-82B1-29891D0F4E79 / Documents / YI13N /sqlite/yi13nevents.db 10月2日17:42:43 JohniPhone yweather [888]:启用Crittercism v4.3.4 ......

1 个答案:

答案 0 :(得分:0)

我创建了一个包含示例数据的sqlite文件,并在初始化应用程序时加载了该文件。从32位到64位机器的数字存储差异是该过程失败的原因。解决方案是从代码中读取数据,如果以后需要,将核心数据存储迁移到另一个设备。迁移过程将创建正确的数字存储位置。