将NSMutableArray保存到NSUserDefaults - 添加对象的问题

时间:2013-01-14 16:07:08

标签: iphone ios nsuserdefaults

我正在尝试使用NSUserDefaults保存数组。我已经让它在我的应用程序的其他部分工作,我似乎无法弄清楚为什么它现在不起作用。似乎它正在向userDefaults-array添加(null),但是当我NSLog我要添加的内容([mainDelegate.globalValdaFragor objectAtIndex:i])时,我可以看到我想要输入的值。

问题似乎是我无法向“felPaFragor” - 阵列添加任何内容,因为当我尝试NSLog时,我得到(null),当我尝试使用另一个“随机”数组时,它工作了。

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"];

非常感谢任何帮助。

编辑:我想我弄明白了。似乎我试图制作一个空数组的mutableCopy,而这反过来又使我的“felPaFragor”-array越野车。添加它使它工作。

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

2 个答案:

答案 0 :(得分:1)

如果执行此操作后:

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

您的felPaFragornil[defaults valueForKey:@"felFragorArray"]很可能正在返回nil

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

答案 1 :(得分:1)

首先:你使用ARC吗?

如果没有,你在这里有内存泄漏:

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

第一个像创建和保留NSMutableArray从未发布(并且从未使用过:你根本不需要那条线,ARC或不是ARC)

只需使用:

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

说,塞尔吉奥的回答可能是正确的......你的价值关键:@“felFragorArray”可能在你此时调用时从未设置过