2017-09-25 4 views
0

NSUserDefaultにオブジェクトの配列を保存せずに保存しようとしています。試行前にアレイからログアウトすると、オブジェクトがいっぱいです。しかし、NSUserDefaultをログアウトしようとすると、NULLになります。誰かが私が間違っているかもしれないものを見ることができますか?ご提案いただきありがとうございます:IOS/Objective-C:カスタム配列をNSUserDefaultとして保存

Items *myItems = [mutableFetchedObjects mutableCopy]; 
    NSLog(@"my Items%@",myItems);//LOGS OUT LONG LIST OF ITEMS 
    NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
    NSData *data = [NSKeyedArchiver archivedDataWithRootObject:myItems]; 
    [currentDefaults setObject:data forKey:@"myItems"]; 
[currentDefaults synchronize]; 
    Items *myRetrievedItems = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"myItems"] mutableCopy]; 
    NSLog(@"my Retrieved Items%@",myRetrievedItems); //LOGS OUT AS NULL 
+1

なぜあなたは 'arrayForKey'を使用していますか? – Paulw11

+0

私は確かではありませんが、同じオブジェクトをロギングしていてもNULLを表示していますか? –

答えて

1

その他の答えは、配列がNSDictionary型(文字列、バイナリ、ブールなど)に準拠していないためです。配列のメンバーはカスタムタイプであるため、保存することはできません。あなたがしなければならないことは、配列をバイナリに変換してから保存することです。

1

返品時に最初にデータをアーカイブ解除する必要があります。データに直接アクセスしています。これは動作しません。あなたは、データ

NSData *dataObj = [currentDefaults objectForKey:@"myItems"]; 

Items *myRetrievedItems = [NSKeyedUnarchiver unarchiveObjectWithData:dataObj]; 

をアーカイブすることに類似した方法で行うことができ、より参考のために、あなたはこのことができます。このanswer.

希望を考慮することができます。 ありがとう!

+0

Got [Items initWithCoder:]:認識できないセレクタがインスタンス – user6631314

+1

@ user6631314にiGenioによって送信されました。あなたのクラスがNSCodingプロトコルに準拠していない可能性があります。あなたは次のようにすることができます:https://stackoverflow.com/a/6696735/3824808 –

0

あなたのアクセス方法が間違っています。

あなたは、次のコードで配列を取得することができます:

アイテム* myRetrievedItems = [[[NSUserDefaults standardUserDefaults] objectForKey: "myItems" @] mutableCopy];

関連する問題