NSUserDefaultsを使用して「お気に入りに追加」機能を実装しようとしています。これまで私は以下のコードを書いています。iPhone:アプリケーションが終了したときにNSUserDefaultsの値を保持する
- (void)favouriteButtonClicked:(id)sender
{
favselected = !favselected; // favselected is BOOL property
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
NSString* viewname = @"custom";
if(favselected) {
[favButton setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateNormal];
[appDelegate addTOFavourites:self.ViewID viewType:self.ViewType];
} else {
[favButton setBackgroundImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
[appDelegate removeFromFavourites:self.ViewID viewType:self.ViewType];
}
}
私のアプリケーションが実行されているように、それは限り、正常に動作しているが、私は自分のアプリケーションを殺したとき、私は次回のビューは、メソッドはfalseを返しますviewloadのisAddedToFavoritesに、ロードされたので、私のすべての格納された値を失っています。とにかく私の価値観を守ることはありますか?何か不足していますか?
if([appDelegate isAddedToFavorites:self.ViewID]) {
[favButton setBackgroundImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateNormal];
favselected = YES;
} else {
[favButton setBackgroundImage:[UIImage imageNamed:@"unselected.png"] forState:UIControlStateNormal];
favselected = NO;
}
編集:
は私が複数のKey-Valueを追加する必要がありますが、以下のような方法があっても、常に辞書にオブジェクトを追加した後、カウント= 0を表示するようNSMutableDictionaryを使用してみました。どんな助けでも本当に感謝しています。ありがとうございました。
-(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 {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *dict = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy];
if(standardUserDefaults) {
if(![dict objectForKey:viewID])
[dict setObject:viewType forKey:viewID]; // It is coming here but still count zero!
NSLog(@"count = %d", [dict count]);
[standardUserDefaults setObject:dict forKey:kFavouriteItemsKey]; // Always dict remains null with 0 objects in it
[standardUserDefaults synchronize];
[dict release];
}
}
-(void)removeFromFavourites:(NSString*)viewID viewType:(NSString*)viewType {
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *dict = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy];
if(standardUserDefaults) {
if ([dict objectForKey:viewID])
[dict removeObjectForKey:viewID];
[standardUserDefaults setObject:dict forKey:kFavouriteItemsKey];
[standardUserDefaults synchronize];
[dict release];
}
}
ありがとうございます。
*あなたの投稿コードのすべて*をログアウトしてみてください。 – Moshe
また、お気に入りの配列をどこかで初期化しましたか? – Moshe
すべてをログアウトするとはどういう意味ですか?私はkFavoriteItemsKeyを変更しようとしましたが運はありませんでした。すでに存在しているデータを持つ辞書オブジェクトを既に初期化しています。データが利用できない場合、nullに設定されますが、それでも私は別々の初期化を行い、それが何か違いを生むのを見ます。 – applefreak