2011-09-13 14 views
0

私はクラス「MainClass」を持っています。そのクラスはNSCodingプロトコルを実装します。そのクラスでは、別のクラス "Object"のオブジェクトを持つ配列があります。これはNSCodingプロトコルも実装しています。nsuserdefaultsのデータを扱うときにアプリケーションがクラッシュする

[NSConcreteMutableDataプロパティ]:認識されていないセレクタ私はNSUserDefaultsの「MainClass」のオブジェクト、その後アーカイブしない、それをアーカイブし、配列からクラス「オブジェクト」のオブジェクトを取得し、それをプロパティを使用しようとすると、私はメッセージを取得しますインスタンスに送信されます。

どうしたらよいですか?それを修正するには?

編集: これは私がNSUserDefaultsを使用したコードです:

(1)あなたはユーザーdefualtsから得たオブジェクトを保持していない:

- (Settings *) readData 
{ 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *dataRepresentingSettings = [currentDefaults objectForKey:@"data"]; 

    if (dataRepresentingSettings != nil) { 
      return (MainClass *)[NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSettings]; 
    } 

    return nil; 
} 

- (void) saveData 
{ 
    [[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self] forKey:@"data"]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 
+2

nsuserdefaultsを保存/ロード/使用する場所にコードを追加できますか?あなたが間違って関数を呼び出すようですが、コードなしでどこをどこに伝えるのが難しいかのようです。 –

+0

'NSUserDefaults'にアクセスしている箇所に関連コードを投稿してください。 –

答えて

1

2つのオプションがあります。 NSUserDefaultsからオブジェクトを取得すると、そのオブジェクトはオートレリースされます。保持したい場合は、retainにする必要があります。

(2)アーカイブを忘れてしまった。あなたは、あなたのオブジェクトをアーカイブするNSKeyedArchiverを使用しますが、それを、アーカイブされなかった:)

あなたが私の中にそのobjectを忘れないでください

Object *object = [defaults objectForKey:@"object"]; 

代わりの

NSData *data = [defaults objectForKey:@"object"]; 
Object *object = [NSKeyedUnarchiver unarchiveObjectWithData:data]; 

NBのようなものを行っている可能性があります例はまだオートリリースされています。

関連する問題