Iphone 如何保留数组的值

Iphone 如何保留数组的值,iphone,objective-c,ios5,xcode4,nsuserdefaults,Iphone,Objective C,Ios5,Xcode4,Nsuserdefaults,我有两个视图控制器。第一个具有到另一个视图控制器的序列。对于后一个视图控制器,我希望添加来自文本字段的项,然后通过单击按钮将其保存在数组中。然后将使用NSUserDefaults保存此数组 在下面的代码中,我可以成功地在数组中存储项。此数组也使用NSUserDefaults保存。然而,当我回到第一个视图控制器,然后再次转到第二个视图控制器在阵列上添加新项目时,我先前存储的项目就消失了。新添加的项目是唯一保存的项目 请注意:) 在我的.h文件中 @interface AddCardViewCont

我有两个视图控制器。第一个具有到另一个视图控制器的序列。对于后一个视图控制器,我希望添加来自文本字段的项,然后通过单击按钮将其保存在数组中。然后将使用NSUserDefaults保存此数组

在下面的代码中,我可以成功地在数组中存储项。此数组也使用NSUserDefaults保存。然而,当我回到第一个视图控制器,然后再次转到第二个视图控制器在阵列上添加新项目时,我先前存储的项目就消失了。新添加的项目是唯一保存的项目

请注意:)

在我的.h文件中

@interface AddCardViewController : UIViewController <UITextFieldDelegate>

@property (strong, nonatomic) IBOutlet UITextField *cardNameTextField;

@end

正如上面给出的代码所示,您只需设置新创建的cardname对象,我认为您必须首先从nsuserdefaluts获取所有数据,并将它们添加到_nameOfCards数组中,然后在addNewCard:(id)sender方法中添加新对象 像

我想这会解决你的问题 试试看
祝您愉快

NSUserDefaults
检索的对象始终是不可变的,即使您为密钥设置了可变对象。你可以把它想象成一个复制品

如果需要基于存储在
NSUserDefaults
中的内容的可变对象,请制作可变副本。例如:

NSMutableArray *cardName = [[[defaults objectForKey:@"cardName"] mutableCopy] autorelease];

尝试使用单例。请参见我的答案:但将其作为NSArray而不是字典。

使用NSMutableArray比使用NSArray更好,因为您可以编辑、添加和删除NSMutableArray中的元素。希望这有帮助。

无法直接“保存”对象数组。数组只包含指针(地址)。如果保存并重新加载它们,它们的含义将不明确。你需要序列化它。基于数组或其他内容重建字符串。要保存值数组,最好使用plist而不是NSUserDefaults。@HeShiming感谢您的建议。如何序列化数组?我不熟悉这种编程语言,所以我不太懂。您建议的代码在保存的数组中添加了一个新项。但是,下一次我再次添加新项目时,应用程序崩溃并发出此通知。***由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[\uu nsFarray insertObject:atIndex:]:正在将方法发送到不可变对象”
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSMutableArray *cardName = [defaults objectForKey:@"cardName"];
self.nameOfCards = cardName;

[self.nameOfCards addObject:self.cardNameTextField.text];

NSMutableArray *finalCardNames = [[NSMutableArray alloc] initWithArray:self.nameOfCards copyItems:YES];

[defaults setObject:finalCardNames forKey:@"cardName"];

[defaults synchronize];
NSMutableArray *cardName = [[[defaults objectForKey:@"cardName"] mutableCopy] autorelease];