Ios NSUserDefaults正在返回(null)

Ios NSUserDefaults正在返回(null),ios,xcode,nsmutablearray,nsuserdefaults,Ios,Xcode,Nsmutablearray,Nsuserdefaults,我是NSUserDefaults的新手,我正在努力让自己的头脑了解一些我认为对大多数阅读本文的人来说可能是直截了当的事情 我正在尝试使用以下代码检索NSUserDefaults中存在的可变字符串数组: NSMutableArray *globalAppsArray; if([[NSUserDefaults standardUserDefaults] objectForKey:@"globalAppsArray"] != nil) { NSLog(@"Array found. Conte

我是
NSUserDefaults
的新手,我正在努力让自己的头脑了解一些我认为对大多数阅读本文的人来说可能是直截了当的事情

我正在尝试使用以下代码检索
NSUserDefaults
中存在的可变字符串数组:

NSMutableArray *globalAppsArray;

if([[NSUserDefaults standardUserDefaults] objectForKey:@"globalAppsArray"] != nil)
{
    NSLog(@"Array found. Contents: %@", globalAppsArray);        
}
else
{
    globalAppsArray = [[NSMutableArray alloc] initWithCapacity:0];
}
向其中添加任何新数据后,我想保存它:

[[NSUserDefaults standardUserDefaults] setObject:globalAppsArray forKey:@"globalAppsArray"];
[[NSUserDefaults standardUserDefaults] synchronize];
当我重新启动应用程序时,发现可变数组正常,但内容为
null

有人能告诉我我遗漏了什么吗?

检查一下你的代码

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *globalAppsArray = [[defaults objectForKey:@"globalAppsArray"] mutableCopy];
if(globalAppsArray)
    NSLog(@"Array found. Contents: %@", globalAppsArray);
else
    globalAppsArray = [NSMutableArray array];

应该是这样的:

NSMutableArray *globalAppsArray = [[NSUserDefaults standardUserDefaults] objectForKey:@"globalAppsArray"];

if(globalAppsArray != nil)
{
    NSLog(@"Array found. Contents: %@", globalAppsArray);
}
else
{
    globalAppsArray = [[NSMutableArray alloc] initWithCapacity:0];
}

将返回一个不可变的NSArray。你不应该做一个
可变拷贝吗
?当然!非常感谢你,桑妮。我会尽快接受你的回答。@JohnSauer:谢谢。我该怎么做?
[[NSUserDefaults standardUserDefaults]objectForKey:@“globalAppsArray”]mutableCopy]
将返回一个不可变的NSArray。您不应该制作一个
可变副本吗?
?是的,或者使用nsmutableArrayWithArray:initializer。谢谢。我已经接受了Sunny的答案,但你的答案也很好,所以请投赞成票。=)