2012-07-24 60 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