arrayWithContentsOfFile返回显然为空的数组

时间:2013-08-28 22:43:32

标签: ios objective-c

http://www.raywenderlich.com/21320/objectively-speaking-a-crash-course-in-objective-c-ios6中,有一个剪切和粘贴XML版本的属性列表。我有以下代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    NSString *plistCatPath = [[NSBundle mainBundle] pathForResource:@"quotes" ofType:@"plist"];
    self.movieQuotes = [NSMutableArray arrayWithContentsOfFile:plistCatPath];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(IBAction)quoteButtonTapped:(id)sender {
    int array_total = [self.movieQuotes count];
    int index = (arc4random() % array_total);
    NSString *my_quote = self.movieQuotes[index][@"quote"];
    self.quoteText.text = [NSString stringWithFormat:@"Quote:\n\n%@", my_quote];
}

quoteButtonTapped中的倒数第三行正在崩溃,因为我试图将模数设为0.这意味着self.movi​​eQuotes注册为空。

quotes.plist存储在目录的根目录中,它看起来是相同的,模数为一个注释和whitespacing,如教程中所示。

我正在做些什么让空self.movieQuotes

1 个答案:

答案 0 :(得分:0)

确保存储阵列的属性的内存管理语义为strongretaincopy。请注意,如果使用复制语义,则在属性类型为NSMutableArray时,您需要自己实现setter方法。 (从你的例子中不清楚你是否真的期望或者需要数组是可变的。)

当然,您还应该仔细检查以确保您有一个格式正确的plist文件名为quotes.plist,该文件以数组作为根元素,并且已正确添加到项目的“复制文件”构建中相。

修改

最后,确保通过添加断点或viewDidLoad语句来实际调用NSLog方法。