如果应用程序启动,我需要选择最后一个元素的表行。 我在plist中保存的最后一个使用元素的名称。 我使用的代码是:
id plist = [[PlistHandler alloc] init];// FIXME: Dont work with long list, if the element is out of view.
if ([tableData containsObject:[plist readDataForKey:@"selectedFile"]]) {
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[tableData indexOfObject:[plist readDataForKey:@"selectedFile"]] inSection:0];
[self.fileTable selectRowAtIndexPath:indexPath animated:YES scrollPosition:UITableViewScrollPositionNone];
[self tableView:self.fileTable didSelectRowAtIndexPath:indexPath];
}
我发现的问题是:如果行不在视图中(表格很大而元素如果低于视图),我会得到一些例外:Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary setObject:forKey:]: attempt to insert nil value (key: selectedFile)'
也许有人知道选择行的更好方法或解决。
更新 我稍微调了一下,现在我知道问题出在哪里了:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSString *cellText = cell.textLabel.text;
id plist = [[PlistHandler alloc] init];
[plist writeDataToKey:@"path" andData:[NSString stringWithFormat:@"%@/%@", documentsDirectory, cellText]];
[plist writeDataToKey:@"selectedFile" andData:cellText];
}
它在最后一行,因为cellText是nil,所以索引可能是错误的。 说明为什么它适用于视图中的元素。
答案 0 :(得分:0)
Cell可能未初始化,因为它尚未使用。这是因为它不在屏幕上。
更深层次的问题是您尝试从UI获取数据。 UI用于显示数据,而不是用于存储和检索数据。从模型中检索数据。您的应用程序应该知道如何执行此操作,因为它知道如何设置单元格。
https://developer.apple.com/library/mac/documentation/general/conceptual/devpedia-cocoacore/MVC.html