如何检查nsuserdefaults是否为空

时间:2011-03-23 04:48:21

标签: iphone

我从sqlite数据库中获取一个项目列表并将它们放在一个数组中。

我需要在我的应用程序第一次运行时获取此数组。

为此我将此数组保存到NSuserdafaults。

我的代码就像这样

if ([[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"]) {

        [[NSUserDefaults standardUserDefaults] setObject:appdelegate.categoriesList forKey:@"categories"];
        NSLog(@"categorylist>>>>>> %@",appdelegate.categoriesList);
    }
    categoriesArray = [[NSMutableArray alloc]init];
    categoriesArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"] mutableCopy];

然后如果条件没有进入。

如果我尝试与此不相等。

if (![[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"]) {

        [[NSUserDefaults standardUserDefaults] setObject:appdelegate.categoriesList forKey:@"categories"];
        NSLog(@"categorylist>>>>>> %@",appdelegate.categoriesList);
    }
    categoriesArray = [[NSMutableArray alloc]init];
    categoriesArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"] mutableCopy];

然后输入每个构建并运行。

但我需要这个用于第一次构建和运行我的意思是安装时间。

任何人都可以帮助我。

提前感谢你。

(如果有人不理解我的问题,请让我添加评论)

1 个答案:

答案 0 :(得分:5)

categoriesArray = [[NSMutableArray alloc]init];
categoriesArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"] mutableCopy];

上面的行会造成泄漏:您首先分配一个数组,然后立即将另一个数组分配给跟踪您分配的数组的同一指针。在第二行之后,您无法释放第一个数组。

至于主要问题,我怀疑是支票

if (![[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"]) {

每次都成功,因为从来没有为密钥@“类别”写入值。我看到条件块内的行尝试写一个值,但是appdelegate.categoriesList可能是零。