2012-07-24 61 views
1

你好:)如何保存對象,但不覆蓋目標C?

我如何保存對象,但在目標C不覆蓋,

我NSUserDefaults的嘗試,但是當我添加對象時,將會改寫!

我怎樣才能避免這種情況,因爲我想在我的應用程序或書籤創建一個收藏夾,

,但我不知道如何保存這些對象我試圖挽救。

這是當我試圖保存。

NSUserDefaults *favorite = [NSUserDefaults standardUserDefaults]; 

[favorite setObject:saveTip forKey:@"saveTipFavorite"]; 

[favorite synchronize]; 

但我覆蓋每一次我推我的應用程序添加到最喜歡的按鈕!

我不希望它覆蓋,但創建一個新的對象並追加它。

我希望你能理解我:)

回答

0

你保存的對象可以是一個數組。創建一個數組以保存提示並將該對象提供給NSUserDefaults

2

它是覆蓋,因爲每個鍵只能有一個對象,並且每次都改變它。你想要做的是存儲數組而不是單個對象,並將其設置爲用戶默認值中的一個鍵。

初始化:

NSMutableArray *objectArray; 
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults]; 
NSArray *oldSavedArray = [currentDefaults objectForKey:@"savedArray"]; 
if (oldSavedArray != nil) 
    objectArray = [[NSMutableArray alloc] initWithArray:oldSavedArray]; 
else 
    objectArray = [[NSMutableArray alloc] init]; 

通知我們從NSArray轉換爲NSMutableArray因爲用戶默認只能存儲不可改變(NSArray)版本。

然後添加一個項目:如果這是你會做了很多(數據噸)

[objectArray addObject:whatever]; 
[currentDefaults setObject:objectArray forKey:@"savedArray"]; 

,您可以考慮使用的核心數據,相反,它會更快。 NSUserDefaults並非真正用於存儲重量級數據。

+0

'NSMutableArray'是'NSArray'的子類,所以最後的轉換是不必要的; '-setObject:forKey:'會接受可變數組(儘管它當然會被永久保存並以純NSArray的形式返回)。 – andyvn22 2012-07-24 20:20:25

+0

好點,謝謝。 (修復) – Dima 2012-07-24 20:21:57

+0

謝謝,這非常幫助我:) – 2012-07-24 20:59:39

0

NSUserDefaults適用於簡單的東西,但如果您希望您的應用程序處理大量數據,您將需要開始使用CoreData

http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/CoreData/cdProgrammingGuide.html

這不僅會解決您的儲蓄問題,這也將使其更容易操作數據。

+0

我的應用程序只是一個提示應用程序,顯示來自網絡的提示...一個對象包含名稱,描述,時間戳,我可以使用NSUserDefaults,或者它太多了數據。 :) – 2012-07-24 21:25:30

+0

你應該很好用NSUserDefaults。我只是建議核心數據,以防需要包含多個對象和多個相同類型的對象。Coredata也有更陡峭的學習曲線,所以請記住你的下一個大項目。 – scord 2012-07-24 21:34:36

+0

是的,我會的,謝謝你:) – 2012-07-24 21:36:15