草庐IT

NSKeyedArchiver

全部标签

ios - NSKeyedArchiver 使用什么字符编码或文件格式?

我目前正在调查一个据称通过NSKeyedArchiver存储的文件解档期间发生的崩溃。崩溃日志包含文件的前8个字节四部分(下面我只包括前2个)。FatalException:NSInvalidArgumentException***-[NSKeyedUnarchiverinitForReadingWithData:]:incomprehensiblearchive(0xffffffa6,0xffffff9e,...)我无法使用ASCII、Base64、UTF8或UTF16将这些字节解码成任何有用的东西。有谁知道NSKeyedArchiver使用哪种文件格式和/或字符编码,或者我如何将这

ios - 写入和读取自定义对象到文件 IOS

我有这个对象。@interfaceSeccionItem:NSObject{NSString*title;NSString*texto;NSArray*images;}@property(nonatomic,strong)NSString*title;@property(nonatomic,strong)NSString*texto;@property(nonatomic,strong)NSArray*images;@end有了这个实现@implementationSeccionItem@synthesizetitle,texto,images;-(void)encodeWithCod

ios - NSKeyedArchiver - 无法识别的选择器发送到实例错误

我在使用NSKeyedArchiver.archivedData时遇到unrecognizedselectorsenttoinstance错误。我试图将解析的JSON输出存储到自定义类对象中,并在成功登录时将其存储在NSUserDefaults中。我想在其他Controller中使用这些细节来进行其他一些POST调用。但是在将它们保存在我的LoginController中时,我遇到了这个错误。有人可以帮助解决这个问题。我的类(class):classUserDetails:NSObject,NSCoding{vartoken:String?varagentId:Int?varuserI

ios - 使用 Xcode Instruments 查看指针处的非僵尸对象历史记录

我目前正在使用Instruments调试“发送到已释放对象的消息”错误。我能够通过“ZombieMessaged”对话框访问故障对象的历史记录。我想在运行时找到一个类似的对象,它被正确分配/解除分配并且没有失败,并检查该对象的历史以比较调用树的样子。有什么办法吗?我可以打印我想检查的对象的指针位置,但是我有什么方法可以使用指针位置信息访问Instruments中该对象的历史记录吗?使用NSKeyedUnarchiver加载的对象似乎由于解码时的过度释放问题而失败,而不以这种方式创建的对象是可以的。 最佳答案 您可以使用instrum

ios - 编码和解码自定义对象

我在编码和保存包含MKMapItem的自定义对象列表到NSUserDefaults时遇到问题。首先,我从用于tableView的MKMapItem数组中获取选定的MKMapItem,并将其存储在我的sharedManager实例中。(稍后将使用sharedManager中的所有值来创建自定义对象)。-(void)tableView:(UITableView*)tableViewdidSelectRowAtIndexPath:(NSIndexPath*)indexPath{//GetthetappedMKMapItemMKMapItem*selectedMapItem=self.sear

ios - NSKeyedArchiver 继承自 NSCoder 为什么会存在 NSKeyedUnarchiver?

为了提供一些背景信息,我是iOS/Objective-C的新手,具有网络开发(Ruby/JS/C#)背景。我了解这些类是如何工作的,但我不明白为什么最初的实现者编写了这两个类(NSKeyedArchiver和NSKeyedUnarchiver),而不是将编码和解码逻辑合并到一个单类。阅读AppledocumentationfortheabstractclassNSCoderNSCoder具有编码和解码的方法。我唯一能想到的是代码很长,所以最初的实现者将它分成了2部分......在我看来,只使用一个类对开发人员来说更方便,但也许我'我错过了一些关于这个的细微差别。那么这有什么历史原因吗?

objective-c - 如何调用encodeWithCoder

可能是一个新手问题-encodeWithCoder是如何调用的?我需要使用它来将对象保存在iphone上的文件中,我只是不确定它的实际调用方式。我必须手动调用它吗?如果是这样,我应该使用什么作为NScoder参数的输入? 最佳答案 你不自己调用,你用NSKeyedArchiver相反:NSData*serialized=[NSKeyedArchiverarchivedDataWithRootObject:foo];foo是符合NSCoding的对象。还有一种方法可以将归档对象直接保存到文件中。

iOS NSDictionary 保存到 NSUserDefaults 不保存值

我正在尝试将具有数组值的NSDictionary保存到NSUserDefaults但我遇到了一些奇怪的问题。我的NSDictionary有NSStrings用于keys并且每个value都是一个NSArrayNSNumbers。当我打印字典时,一切都很好。我将这本字典写入NSUserDefaults,如果我立即读回它,一切都很好。使用这个一切接缝就好了:[[NSUserDefaultsstandardUserDefaults]setObject:self.selectedOptionPositionsforKey:PREF_OPTIONS_KEY];[[NSUserDefaultsst

ios - NSKeyedArchiver 线程安全吗?

我是否需要担心在后台线程中使用archiveRootObject和unarchiveObjectWithFile?dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{[NSKeyedArchiverarchiveRootObject:myArraytoFile:file];}); 最佳答案 你应该非常小心。archiveRootObject不是原子操作。例如,如果您在后台线程上调用archiveRootObject,而另一个线程更

objective-c - 如何对 NSCoding 进行单元测试?

我有一个iOS应用程序,其中使用NSCoding保存数据,更准确地说是使用NSKeyedArchiver。此应用程序已在AppStore上可用。我正在开发应用程序的第2版,数据模型应该会发生变化。所以我需要处理数据模型迁移。我希望单元测试涵盖它。在我的测试中,我想使用旧数据模型动态生成持久化数据,启动迁移并查看是否一切顺利。目前,归档一个对象是这样的:MyDataModelObject*object=....NSKeyedArchiver*archiver=[[NSKeyedArchiveralloc]initForWritingWithMutableData:data];[archi