`
- 浏览:
211713 次
- 性别:
- 来自:
北京
-
[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive version
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSKeyedUnarchiver initForReadingWithData:]: incomprehensible archive version (-1)'
抄书上的一段代码,结果就出现这个异常,刚开始是好的,后来修改了一下plist文件名,再运行的时候报错。
应该是因为之前没有完成程序的时候编译运行过一次,并保存了文件。 然后你又改变了数据的结构,所以 unarchiver 不认识你的文件了。
我的解决办法:点Xcode的Run选项下面的clean选项,这个选项应该会将临时文件和缓存清除掉,重新运行就可以了
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
详细介绍:github.com/pro648/tips/wiki/数据存储之归档解档-NSKeyedArchiver-NSKeyedUnarchiver - archiveRootObject: toFile:不能决定如何处理归档的数据,直接被写入了文件。 - ...
2. 创建NSKeyedUnarchiver实例:使用`+[NSKeyedUnarchiver unarchiveObjectWithData:]`方法,传入NSData对象。 3. 恢复对象:返回的对象会是原始类型,或者其所有属性都被正确地恢复。 在iOS 12中,这些过程仍然...
Person *thePerson = [NSKeyedUnarchiver unarchiveObjectWithFile:@"./person.data"]; NSLog(@"%@",thePerson.name); //http://zhangxi.me NSLog(@"%@",thePerson.male?@"男":@"女"); //男 NSLog(@"%ld",...
功能: 一、json、对象、字典等随意转换,容纳所有类型,包括常用的NSObject家族,基本数据类型int、long等,冷门的...myObj = [NSKeyedUnarchiver unarchiveObjectWithFile:path]; // 打印 7、NSLog(@"%@", myObj);
在iOS开发中,我们经常使用NSKeyedArchiver和NSKeyedUnarchiver这两个类来实现Swift对象的序列化和反序列化。 在Swift 5.2中,这个过程对于数组特别重要,尤其是当数组包含自定义模型对象时。模型对象通常是那些...
当需要恢复对象时,`NSKeyedUnarchiver`会反向执行此过程,解码并重构对象。这一特性使得`NSKeyedArchiver`非常适合用来保存用户设置、游戏进度或者应用程序状态等数据。 1. **归档单个对象**: 要归档一个对象,...
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data]; Person *unarchivedPerson = [unarchiver decodeObjectForKey:@"person"]; NSLog(@"Name: %@, Age: %ld", ...
这涉及到调用`initForReadingWithData:`方法创建解码器,然后通过`decodeObjectForKey:`来获取对象的各个属性。 5. **验证结果**:最后,你可以检查反序列化后的对象是否与原始对象具有相同的属性值,以确认序列化和...
在iOS中,归档主要依赖于`NSKeyedArchiver`和`NSKeyedUnarchiver`两个类来完成对象的存档与还原。这两个类都是基于`NSCoding`协议实现的。 #### 二、实现原理 为了实现归档,对象需要遵循`NSCoding`协议,这意味着...
归档的概念基于苹果的Foundation框架,特别是NSKeyedArchiver和NSKeyedUnarchiver类,它们提供了序列化和反序列化的功能。在本案例中,"归档的封装"是指开发人员已经创建了一个封装好的库或类,简化了使用归档操作的...
.appendingPathComponent("user.archive") // 归档 do { try NSKeyedArchiver.archiveRootObject(user, toFile: archivePath.path) } catch { print("Error archiving: \(error)") } // 解档 if let ...
将NSData反序列化回NSDictionary,我们可以使用`NSKeyedUnarchiver`类的`unarchiveObjectWithData:`方法。对于JSON格式的NSData,我们可以使用`JSONObjectWithData:options:error:`方法。 ```objc // 反序列化回...
MyClass *unarchivedObject = [NSKeyedUnarchiver unarchiveObjectWithData:dataFromFile]; ``` 归档和反归档不仅可以应用于自定义对象,还可以用于任何遵循NSCoding协议的对象,包括基本数据类型、NSArray、...
只需调用`+[NSKeyedArchiver archivedDataWithRootObject:]`和`+[NSKeyedUnarchiver unarchiveObjectWithData:]`,即可完成归档和解档。这种方法简化了编码和解码步骤,但同样需要确保根对象及其所有嵌套对象遵循...
2. 解档过程:当需要恢复对象时,可以使用`+[NSKeyedUnarchiver unarchiveObjectWithData:]`方法,将NSData对象解档回原始对象。 三、Demo解析 "DemoArchivedCoding"可能包含了一个简单的iOS应用,该应用展示了如何...
`和`id object = [NSKeyedUnarchiver unarchiveObjectWithFile:path];` 4. **SQLite 3**: - SQLite是一个轻量级的关系型数据库,适用于存储结构化的数据。 - 使用方法:通过`FMDB`等库与SQLite交互,执行SQL语句...
return [NSKeyedUnarchiver unarchiveObjectWithFile:filePath]; } ``` 5. **安全注意事项**: - 当编码对象时,确保所有属性都是可编码的,这意味着它们要么是基本数据类型,要么也遵循NSCoding协议。 - 对于...
4. 使用生成的Model:导入生成的Model头文件,然后可以使用`init`方法或者`NSKeyedUnarchiver`来创建Model实例。 ```objc MyModel *model = [[MyModel alloc] initWithDictionary:jsonDict]; // 或者 NSData *data ...