核心数据自动迁移不起作用
Posted
技术标签:
【中文标题】核心数据自动迁移不起作用【英文标题】:Core data auto migration is not working 【发布时间】:2015-01-19 10:50:15 【问题描述】:伙计们,
我需要一些关于核心数据迁移的帮助,这里是关于情况的描述。
-
我有一个现有的 ios 应用,它使用核心数据提供离线支持。
应用商店当前版本为 1.1,应用商店当前核心数据模型版本为 11 (Model11.xcdatamodel)。
现在我正在向应用商店发布一个新版本(1.1.1),并且已经发生了重大工作。还有一个实体在核心数据中添加了一个新属性。
在对模型文件进行更改之前,我以 Model11.xcdatamodel 为基础添加了新的模型文件 (Model12.xcdatamodel)。
将 Model12.xcdatamodel 制作为当前版本。
在其中一个实体中添加了新属性以支持该功能,更改了模式等。
在此之后,我从 Xcode 实用程序窗口(右侧)创建了 Model11.xcdatamodel,其类型为“版本核心数据模型”。
从应用商店安装 1.1v,登录后,我在发布模式下创建了 1.1.1v 应用并安装。
但应用程序开始崩溃,并显示商店 URL 为空,这是来自设备的日志。
Jan 19 13:04:50 iPod MyApp[15856] <Error>: Magical Record Stack: Current Default Core Data Stack: ----
Model:
BroadcastMessage = <6fa959c6 514f4c53 e53e7fd7 28585c56 6d4da4ad ba56c2c4 d92bef6e debadfd4>;
Data = <92870bec c4a8794e 293dcbe9 93282d69 cb675039 cb9b9bf6 8dda6359 34697663>;
Event = <de060947 8ec9f2bb 80e341eb 787e7eec 7cc2a09f 356e511c 7d515ca5 130690fe>;
InvitedFriend = <1e041915 6931f26e fd325666 299adf13 5fa2a735 b16b5faf cc0c7de1 1792c97f>;
MAnswer = <5c06b689 b0497f14 65e550d0 1bd30779 08056f42 a6361f71 4e0eb2e5 67127d66>;
MQuestion = <96d6e2a6 b96f1371 2c52e719 ca6a0cbd 7957e63a 4a6ccbe8 049e8818 f9ec5d2d>;
MUser = <af239067 1b3fb3d9 d63b6536 e0e411a8 6ff5f02e db5d7c01 968a4835 4f361610>;
NotificationSettings = <75be9f25 cfb5f63e 9f717160 9b389386 8fb9d7e2 093648ac beff79dd b0c8181b>;
RecentContact = <0eaf2696 94c73a4e 9155b3aa c98bf623 51165db6 c1a1472c 2178c3d0 654c0dac>;
Coordinator: <NSPersistentStoreCoordinator: 0x15e883a0>
Store: (null)
Default Context: <NSManagedObjectContext (0x15e96c70): *** DEFAULT ***> on *** MAIN THREAD ***
Context Chain:
- DEFAULT (0x15e96c70) (*)
- BACKGROUND SAVING (ROOT) (0x15e99000)
Jan 19 13:04:50 SB-iPod Medusa[15856] <Error>: Store2 URL after creation (null)
商店 URL 为 NULL。我不确定为什么会这样。
如果我在调试模式下运行,我会得到一个有效的 URL,并注意我正在使用 Magical Records 来获取核心数据。
我已关注此链接中提到的内容https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/CoreData/Articles/cdUsingMOM.html 但这不起作用
有人能告诉我为什么这次迁移会失败,我该如何解决这个问题?
【问题讨论】:
第 7 步应该是第 4 步。第 4 步是不必要的,因为您制作了两个无法迁移的不同模型。 我现在该如何解决这个问题? @thom_ek : 我该如何解决这个问题? 我没有注意到您正在使用 MagicalRecords(因此,我删除了我的答案)。所以,请给一些 MR/CoreData 初始化代码。 - (void) setupCoredataStack NSURL *storeURL2 = [NSPersistentStore MR_urlForStoreName:kSQLLiteStoreName2]; //NSLog(@"store2 URL %@", storeURL2); if ([[NSFileManager defaultManager] fileExistsAtPath:[storeURL2 path]]) [MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:kSQLLiteStoreName2]; DDLogWarn(@"Magical Record Stack: %@", [MagicalRecord currentStack]); DDLogWarn(@"Store2 创建后的 URL %@", [NSPersistentStore MR_defaultPersistentStore].URL);返回; 【参考方案1】:最后我最终使用手动迁移而不是自动/轻迁移。这解决了问题
请查看此链接,非常有用https://github.com/magicalpanda/MagicalRecord/issues/466
【讨论】:
以上是关于核心数据自动迁移不起作用的主要内容,如果未能解决你的问题,请参考以下文章