如何将数组保存到文件并加载并询问它是否包含特定文件

时间:2010-08-20 13:07:28

标签: iphone

我在我的app delegate中引用了这个名为favorites的数组。 当我在视图控制器中访问它时,我使用此代码

MultiViewAppDelegate *app = (MultiViewAppDelegate *)[[UIApplication sharedApplication] delegate];
    [app.favoritesArray addObject:@"one"];

在应该显示此信息的表中,我试图询问数组是否包含某个元素,以及是否使用此代码显示该项目。

NSLog (@"2");
favoritesArray = [[NSMutableArray alloc]init];

didContain = [[NSMutableArray alloc]init];

NSLog (@"3");

if ([favoritesArray containsObject:@"one"])

{[didContain addObject:@"one"];
NSLog (@"4"); }

但是在nslog 3之后代码没有运行... 有人可以告诉我为什么吗?

2 个答案:

答案 0 :(得分:2)

首先,

NSLog (@"2");
favoritesArray = [[NSMutableArray alloc]init];

以上行将重置您的favoritesArray。它也会泄漏旧的。

didContain = [[NSMutableArray alloc]init];

NSLog (@"3");

if ([favoritesArray containsObject:@"one"])

在这里,你只是问一个空数组,如果它包含某些东西,它显然不会。

{[didContain addObject:@"one"];
NSLog (@"4"); }

这就是为什么以上都不会发生的原因。

不要重置它,而是确保设置它。

if (favoritesArray != nil && 
    [favoritesArray containsObject:@"one"]) {
    NSLog(@"yay, it had one in it");
} else {
    NSLog(@"it's nil or it didn't have one in it");
}

你可能不需要favoritesArray != nil,但我把它放入,因为你可能已经把你的alloc-init内容放进去,因为你有时会得到一个零值。不太可能。

if ([favoritesArray containsObject:@"one"]) {
    // contains "one"
}

应该这样做。

答案 1 :(得分:0)

检查代理中的favoritesArray是否已初始化。如果是nil,则条件永远不会成立。