我从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];
然后输入每个构建并运行。
但我需要这个用于第一次构建和运行我的意思是安装时间。
任何人都可以帮助我。
提前感谢你。
(如果有人不理解我的问题,请让我添加评论)
答案 0 :(得分:5)
categoriesArray = [[NSMutableArray alloc]init];
categoriesArray = [[[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"] mutableCopy];
上面的行会造成泄漏:您首先分配一个数组,然后立即将另一个数组分配给跟踪您分配的数组的同一指针。在第二行之后,您无法释放第一个数组。
至于主要问题,我怀疑是支票
if (![[NSUserDefaults standardUserDefaults] arrayForKey:@"categories"]) {
每次都成功,因为从来没有为密钥@“类别”写入值。我看到条件块内的行尝试写一个值,但是appdelegate.categoriesList可能是零。