我在viewDidLoad中初始化字典并使用它来创建表格视图单元格。
第一次加载正常。但是只要我滚动表格视图以查看项目(未显示在底部),应用程序就会崩溃。通过调试器,我注意到当我进行滚动时,字典项“rootItemsDict”的地址发生了变化。无法弄清楚为什么会这样。根据我的理解,初始化一次的对象的地址应保持相同,至少在给定的类实例中。有什么想法吗?
- (void)viewDidLoad {
[super viewDidLoad];
NSString *path = [[NSBundle mainBundle] pathForResource:@"menu" ofType:@"plist"];
rootItemsDict = [NSDictionary dictionaryWithContentsOfFile:path];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
NSString *title = (NSString *)[[[rootItemsDict objectForKey:@"rootMenuItems"] objectAtIndex:row] objectForKey:@"heading"];
答案 0 :(得分:2)
+dictionaryWithContentsOfFile:
返回一个自动释放的实例。要获得所有权,您需要明确保留它:
rootItemsDict = [[NSDictionary dictionaryWithContentsOfFile:path] retain];
...或使用alloc
/ init
表单:
rootItemsDict = [[NSDictionary alloc] initWithContentsOfFile:path];
...或者如果您有合适的属性声明(retain
),请使用setter:
self.rootItemsDict = [NSDictionary dictionaryWithContentsOfFile:path];
我建议您阅读Memory Management Programming Guide,尤其是object ownership上的部分。