複数のキー値を追加する必要があるため、NSMutableDictionaryを使用して「お気に入りに追加」機能を実装しようとしています。次のaddToFavouritesメソッドは、オブジェクトを辞書に追加した後も常にCount = 0を表示します。私はthisを読んで、(mutable配列の代わりに)mutabledictionaryにnsdefaultsを取得し、結果の辞書をnsdefaultsに設定し直しましたが、何が問題なのかはわかりません。どんな助けでも本当に感謝しています。ありがとうございました。iPhone:NSMutableDictionaryをNSUserDefaultsに保存することができません
編集: 投稿者this私は可変と不変の辞書の周りにデータを移動しなければならないことを知りました。変更されたNSMutableDictionaryをNSUserDefaultsに同期させることはできません。
-(BOOL)isAddedToFavorites:(NSString*)viewID {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *favourites = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy];
if(favourites && [[favourites objectForKey:kFavouriteItemsKey] objectForKey:viewID])
return YES;
return NO;
}
-(void)addToFavourites:(NSString*)viewID viewType:(NSString*)viewType {
NSMutableDictionary *myMutableDictionary= [NSMutableDictionary dictionaryWithCapacity:[myDictionary count]+1];
[myMutableDictionary addEntriesFromDictionary:myDictionary];
[myMutableDictionary setObject:myObject forKey:myKey];
// Modified dictionary is not getting synced
[[NSUserDefaults standardUserDefaults] setObject:myMutableDictionary forKey:kFavouriteItemsKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
辞書データをNSDataに書き出しようとしましたが、軽度ではあるが重大な修正を加えた後に機能しました。
-(BOOL)isAddedToFavorites:(NSString*)viewID {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:kFavouriteItemsKey];
NSDictionary *favourites = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if(favourites && [favourites objectForKey:viewID])
return YES;
return NO;
}
-(void)addToFavourites:(NSString*)viewID viewType:(NSString*)viewType {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:kFavouriteItemsKey];
NSDictionary *myDictionary = [NSKeyedUnarchiver unarchiveObjectWithData:data];
NSMutableDictionary *myMutableDictionary= [NSMutableDictionary dictionaryWithCapacity:[myDictionary count]+1];
[myMutableDictionary addEntriesFromDictionary:myDictionary];
[myMutableDictionary setObject:viewType forKey:viewID];
NSData *newdata = [NSKeyedArchiver archivedDataWithRootObject:myMutableDictionary];
[[NSUserDefaults standardUserDefaults] setObject:newdata forKey:kFavouriteItemsKey];
[[NSUserDefaults standardUserDefaults] synchronize];
}
ありがとうございます。あなたは辞書内の要素のためにこれを実装する必要があります
このhttp://stackoverflow.com/questions/471830/why-nsuserdefaults-failed-to-save-nsmutabledictionary-in-iphone-sdkは重複しているようです。助けてくれますか? – phi
これは実際にはAppleDeveloperが文字列を格納していて、まだ問題があるように見えます。 – Joe
@Irene:辞書の値をエンコードしようとしましたが、まだ動作しません!編集された質問を参照してください!エンコード辞書の – applefreak