2011-07-05 52 views
1

我正在嘗試使用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]; 
} 
} 

它只要工作細如我的應用程序正在運行,當我殺了我的申請,我失去這樣當下次查看裝入,在viewload isAddedToFavorites方法返回false我所有的存儲值。無論如何保存我的價值觀?我錯過了什麼嗎?

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; 
    } 

編輯:

我試圖使用的NSMutableDictionary作爲我必須添加多個鍵值但下面的方法總是甚至添加對象字典之後顯示計數= 0。任何幫助將非常感激。謝謝。

-(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]; 
} 
} 

謝謝。

+0

嘗試退出* *一切都在你的代碼發佈。 – Moshe

+0

另外,你有沒有初始化你的收藏夾數組? – Moshe

+0

你是什麼意思註銷一切?我試着改變kFavoriteItemsKey,但沒有運氣。我已經用已有數據初始化字典對象。如果數據不可用,它將設置爲空,但我仍然會單獨進行初始化,並看到它有任何區別。 – applefreak

回答

3

NSUserDefaults實際上用於永久存儲值,實際上如果您爲程序創建任何設置,它們將被保存爲NSUserDefaults。

我認爲問題在於您沒有使用您正在檢索的相同密鑰來保存它。嘗試保存這樣的:

//To save 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:appDefaults forKey:kFavouriteItemsKey]; 
    [[NSUserDefaults standardUserDefaults] synchronize]; 

    //To retrieve 
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults]; 
NSMutableDictionary *favourites = [[standardUserDefaults objectForKey:kFavouriteItemsKey] mutableCopy]; 

對於詞典嘗試:

NSDictionary *myDictionary= [[NSUserDefaults standardUserDefaults] objectForKey:kFavouriteItemsKey]; 

     // Create a mutable dictionary to replace the old immutable dictionary 
    NSMutableDictionary *myMutableDictionary= [NSMutableDictionary dictionaryWithCapacity:[myDictionary count]+1]; 

     // transfer the old dictionary into the new dictionary 
    [myMutableDictionaryaddEntriesFromDictionary:myDictionary]; 

     // Now add the data 
    [myMutableDictionary setObject:myObject forKey:myKey]; 
+0

你說得對。這是我的不好。我以前用相同的密鑰存儲了一些無效的NSData值,這就是造成這個問題的原因。我已經改變了關鍵的名稱,它的工作!謝謝!順便說一下,這個值在iPhone上存儲在哪裏?我怎樣才能刪除它們而不提及我的應用程序?另外,你是否看到另一個問題,爲什麼我的櫃檯總是變爲零?它仍在發生。我無法存儲多個鍵值。基本上我得到當前默認值爲可變字典,修改它們並將修改後的字典設置爲默認值,但似乎不工作! – applefreak

+0

@AppleDeveloper值存儲在應用程序「沙盒」中,因此它總是專指您的應用程序,但您可以使用[[NSUserDefaults standardUserDefaults] removeObjectForKey:myKey];刪除任何你想要的NSUserDefaults,我不知道我是否看到這個問題,你可以把鏈接?,我可以看看它。 –

+0

嗨OscarMK,我已經編輯了我的問題,並提出了一些有助於您理解問題的意見。我很久以前就在撓頭。無法理解發生了什麼!任何幫助將非常感激。謝謝。 – applefreak

相關問題