gpt4 book ai didi

iOS 7 - 核心数据迁移 - Xcode 5

转载 作者:可可西里 更新时间:2023-11-01 05:35:51 25 4
gpt4 key购买 nike

我在执行 CoreData 迁移时遇到了一个非常奇怪的问题。

基本上,我有 2 个实体,我在其中一个实体中添加了一个属性,在另一个实体中,我将属性类型从 NSString 更改为 NSArray(Transformable)。到目前为止,非常好,运行良好,进行了测试,迁移后数据完整性完好无损。

如果我在 Xcode 5 上运行完全相同的代码(我不知道它是否与 iOS SDK 7.0 或 Xcode 5 相关),就会出现问题,但是迁移会运行并损坏数据。

我最终创建了一个简单的项目来演示正在发生的事情。 https://dl.dropboxusercontent.com/u/1393279/CoreDataMigration.zip

重现的步骤是:- 在 Xcode 5 (iOS SDK 7.0) 上,您可以使用模拟器 -

1 - 打开项目“BeforeMigration”并执行。查看创建的日志和数据,目前没有问题;

2 - 停止项目;

3 - 打开项目“AfterMigration”,构建并运行。

4 - 看到迁移已执行,但数据已损坏:

2013-11-13 12:22:29.778 CoreDataMigration[7223:70b] CoreData: error: exception during fetchRowForObjectID: * -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x43, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0) with userInfo of (null) 2013-11-13 12:22:29.782 CoreDataMigration[7223:70b] Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive (0x43, 0x32, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)'

据我所知,无法理解的存档意味着 CoreData 上的数据已损坏。

令人难以理解的是,完全相同的代码之前可以正常工作,因此,如果这是一个逻辑问题,它应该发生在 Xcode 4.5 上。我查找了 CoreData Diffs,但没有找到任何相关信息。

如果有人知道可能是什么问题,我将不胜感激。谢谢。

最佳答案

在 iOS 7 中,Core Data SQLite 存储的默认日志记录模式已更改为预写日志记录 (WAL),以提高可靠性、性能和并发性。

问题是我没有移动包含核心数据的 -wal 文件。修复它的一种方法是使用以下方法删除 -wal:

NSDictionary *options = @{NSSQLitePragmasOption:@{@"journal_mode":@"DELETE"}};

或者移动 -wal :

- (NSPersistentStore *)migratePersistentStore:(NSPersistentStore *)store toURL:(NSURL *)URL options:(NSDictionary *)options withType:(NSString *)storeType error:(NSError **)error

关于iOS 7 - 核心数据迁移 - Xcode 5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19960181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com