在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.movieQuotes注册为空。
quotes.plist
存储在目录的根目录中,它看起来是相同的,模数为一个注释和whitespacing,如教程中所示。
我正在做些什么让空self.movieQuotes
?
答案 0 :(得分:0)
确保存储阵列的属性的内存管理语义为strong
,retain
或copy
。请注意,如果使用复制语义,则在属性类型为NSMutableArray
时,您需要自己实现setter方法。 (从你的例子中不清楚你是否真的期望或者需要数组是可变的。)
当然,您还应该仔细检查以确保您有一个格式正确的plist文件名为quotes.plist
,该文件以数组作为根元素,并且已正确添加到项目的“复制文件”构建中相。
最后,确保通过添加断点或viewDidLoad
语句来实际调用NSLog
方法。