0

我正在尝试使用 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];
}
4

2 回答 2

1

如果执行此操作后:

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

你的felPaFragornil,那么很有可能[defaults valueForKey:@"felFragorArray"]是回来了nil

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

于 2013-01-14T16:27:14.597 回答
1

第一:你在使用ARC吗?

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

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

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

只需使用:

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

话虽如此,塞尔吉奥的答案可能是正确的......你的 valueForKey:@"felFragorArray" 在此时调用它时可能从未设置过

于 2013-01-14T16:36:07.067 回答