将第三方库自定义对象保存到NSUSerDefault

时间:2013-10-18 21:26:03

标签: iphone ios objective-c

所以,我正在使用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.'

您可以在PhotoEditorSession

查看AFPhotoEditor会话课程

2 个答案:

答案 0 :(得分:0)

通过声明和定义符合该协议的类别并实现必要的方法,可以使类符合NSCoding

答案 1 :(得分:0)

实际上,创建自己的类别意味着,在永久添加或更改新的ivars时,您必须使其符合该对象。

这样做的正确方法是确切地确定重新创建该类对象所需的内容 - 核心值 - 然后为每个对象创建键和值并将它们放入字典中。将词典放入用户默认值。如果要检索值,请拉出字典,使用这些值来实例化对象。

另一种选择是要求AFPhotoeditor的作者这样做,或者自己动手,并向他发送拉取请求。但是,如果您将其作为附加组件进行,则每次原始框架更改时都必须更新您的类别。