0

所以,我正在使用 AFPhotoEditorController,它有一个名为 AFPhotoeditorSession 的属性,用于存储和跟踪所有用户操作。这个会话类是从 NSObject 继承的自定义对象,我已经搜索了如何在 NSUser Defaults 中保存自定义对象并来到知道如果该类符合协议 NSCoding 我们可以保存该类,我不知道我是否可以更改该类,因为它只是我在 AviarySDk 的自定义框架中拥有的.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 Session 类

4

2 回答 2

0

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

于 2013-10-18T21:30:15.277 回答
0

实际上,创建您自己的类别意味着您必须让它永远与该对象兼容,因为新的 ivars 被添加或更改,永远。

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

另一种选择是让 AFPhotoeditor 的作者来做,或者自己做,然后给他发一个 pull request。但是,如果您将其作为附加组件进行,则每次原始框架更改时都必须更新您的类别。

于 2013-10-18T22:09:17.517 回答