0

だから、私は AFPhotoEditorController を使用しており、すべてのユーザーアクションを保存および追跡する AFPhotoeditorSession という名前のプロパティがあります。これは、NSObject から継承するカスタムオブジェクトです。そのクラスがプロトコル 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セッション クラスを確認できます。

4

2 に答える 2

0

NSCodingそのプロトコルに準拠し、必要なメソッドを実装するカテゴリを宣言および定義することにより、クラスを準拠させることができます。

于 2013-10-18T21:30:15.277 に答える
0

実際に独自のカテゴリを作成するということは、新しい ivar が追加または変更されたときに、永久にそのオブジェクトに準拠する必要があることを意味します。

これを行う正しい方法は、そのクラスのオブジェクトを再作成するために必要なもの (コア値) を正確に決定し、それぞれのキーと値を作成して辞書に入れることです。辞書をユーザーのデフォルトに入れます。値を取得する場合は、辞書を引き出し、それらの値を使用してオブジェクトをインスタンス化します。

もう 1 つのオプションは、AFPhotoeditor の作成者に依頼するか、自分で作成してプル リクエストを送信することです。ただし、アドオンとして行う場合は、元のフレームワークが変更されるたびにカテゴリを更新する必要があります。

于 2013-10-18T22:09:17.517 に答える