我在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 JohniPhone SpringBoard [48]:应用程序'UIKitApplication:com.carbonrose.BiopLog [0x9dbb]'崩溃了。 10月2日17:42:41 JohniPhone断言[58]:pid_suspend失败:未知错误:-1,未知错误:-1 10月2日17:42:41 JohniPhone断言[58]:无法将优先级设置为2,优先级:没有这样的过程 10月2日17:42:41 JohniPhone断言[58]:无法将优先级设置为4096,优先级:没有这样的过程 10月2日17:42:41 JohniPhone UserEventAgent [17]:id = com.carbonrose.BiopLog pid = 886,state = 0 10月2日17:42:41 JohniPhone定位[55]:位置图标现在应处于“活动”状态 10月2日17:42:41 JohniPhone 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 ......
答案 0 :(得分:0)
我创建了一个包含示例数据的sqlite文件,并在初始化应用程序时加载了该文件。从32位到64位机器的数字存储差异是该过程失败的原因。解决方案是从代码中读取数据,如果以后需要,将核心数据存储迁移到另一个设备。迁移过程将创建正确的数字存储位置。