所以,我正在使用AFPhotoEditorController,它的属性名为AFPhotoeditorSession,用于存储和跟踪所有用户操作。会话类是继承自NSObject的自定义对象,我已经搜索了如何在NSUser默认值中保存自定义对象并且知道我们可以保存该类,如果该类符合协议NSCoding,我不知道我是否可以更改此类,因为它是我在我的AviarySDk自定义框架中的only.h文件。
NSData *myEncodedObject = [NSKeyedArchiver archivedDataWithRootObject:
[self.sessions objectAtIndex:0]]; // self.session an array of one object of AFPhotoeditorSession
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:myEncodedObject forKey:@"myEncodedObjectKey"];
[defaults synchronize];
NSData *data1 = [defaults objectForKey:@"myEncodedObjectKey"];
AFPhotoEditorSession *obj = (AFPhotoEditorSession *)[NSKeyedUnarchiver unarchiveObjectWithData: data1];
NSLog(@"%@",obj);
我收到的错误如下:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<AFPhotoEditorSession 0x1c5fa0f0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key modified.'
查看AFPhotoEditor会话课程
答案 0 :(得分:0)
通过声明和定义符合该协议的类别并实现必要的方法,可以使类符合NSCoding
。
答案 1 :(得分:0)
实际上,创建自己的类别意味着,在永久添加或更改新的ivars时,您必须使其符合该对象。
这样做的正确方法是确切地确定重新创建该类对象所需的内容 - 核心值 - 然后为每个对象创建键和值并将它们放入字典中。将词典放入用户默认值。如果要检索值,请拉出字典,使用这些值来实例化对象。
另一种选择是要求AFPhotoeditor的作者这样做,或者自己动手,并向他发送拉取请求。但是,如果您将其作为附加组件进行,则每次原始框架更改时都必须更新您的类别。