Iphone 将NSMutableArray保存到NSUserDefaults-添加对象时出现问题

Iphone 将NSMutableArray保存到NSUserDefaults-添加对象时出现问题,iphone,ios,nsuserdefaults,Iphone,Ios,Nsuserdefaults,我正在尝试使用NSUserDefaults保存数组。我已经让它在我的应用程序的其他部分工作,我似乎不明白为什么它现在不工作。它似乎正在向userDefaults数组添加(null),但当我记录我要添加的内容([mainDelegate.globalValdaFragor objectAtIndex:I])时,我可以看到我要输入的值 问题似乎是,我无法向“felPaFragor”数组添加任何内容,因为当我尝试对其进行NSLog时,我得到了(null),当我尝试使用另一个“random”数组时,它工

我正在尝试使用NSUserDefaults保存数组。我已经让它在我的应用程序的其他部分工作,我似乎不明白为什么它现在不工作。它似乎正在向userDefaults数组添加(null),但当我记录我要添加的内容([mainDelegate.globalValdaFragor objectAtIndex:I])时,我可以看到我要输入的值

问题似乎是,我无法向“felPaFragor”数组添加任何内容,因为当我尝试对其进行NSLog时,我得到了(null),当我尝试使用另一个“random”数组时,它工作了

RPAppDelegate *mainDelegate = (RPAppDelegate *)[[UIApplication sharedApplication]delegate];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

NSMutableArray *felPaFragor = [[NSMutableArray alloc] init];
felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];

[felPaFragor addObject:[mainDelegate.globalValdaFragor objectAtIndex:i]];

[defaults setObject:felPaFragor forKey:@"felFragorArray"];
任何帮助都将不胜感激

编辑:我想我明白了。似乎我是在尝试创建一个空数组的可变副本,这反过来又让我的“felPaFragor”-数组小车变得很糟糕。加上这个,它就成功了

felPaFragor = [[NSMutableArray alloc] init];
if ([[defaults valueForKey:@"felFragorArray"] objectAtIndex:0] != NULL) {
    felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];
}

如果在执行此操作后:

NSMutableArray *felPaFragor = [[NSMutableArray alloc] init];
felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];
您的
felPaFragor
nil
,则极有可能
[默认值forkey:@“felfragorray”]
返回
nil


因此,您的密钥有问题,或者与该密钥关联的对象可能从未存储在
NSUserDefaults
中。

首先:您使用的是ARC吗

如果不是,则此处存在内存泄漏:

NSMutableArray *felPaFragor = [[NSMutableArray alloc] init];
felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];
第一种方法是创建并保留一个从未发布过的NSMutableArray(也从未使用过:你根本不需要那条线,不管是圆弧还是非圆弧)

只需使用:

NSMutableArray *felPaFragor = [[defaults valueForKey:@"felFragorArray"] mutableCopy];

说,塞吉奥的答案可能是正确的。。。您的valueForKey:@“felfragorray”在此时调用时可能从未设置过

您是否已将felPaFragorIt gives(null)记录在案。即使我在添加对象后直接执行此操作。在添加对象之前,是否可以插入
NSLog(@“felPaFragor=%@,[felPaFragor description])并显示它的输出?这会给出:felPaFragor=(),或者如果我在添加mutableCopy:felPaFragor=(null)后放入if,我认为它给出的是nil对象,当它在字典中找不到键时会发生“或者可能与该键相关联的对象从未存储在NSUserDefaults中。”这似乎就是它所做的。添加检查后,查看它是否在工作之前已存储。非常感谢。