如果元素不在视图范围内,则选择表格行不起作用

时间:2014-09-10 07:18:29

标签: ios objective-c uitableview

如果应用程序启动,我需要选择最后一个元素的表行。 我在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,所以索引可能是错误的。 说明为什么它适用于视图中的元素。

1 个答案:

答案 0 :(得分:0)

Cell可能未初始化,因为它尚未使用。这是因为它不在屏幕上。

更深层次的问题是您尝试从UI获取数据。 UI用于显示数据,而不是用于存储和检索数据。从模型中检索数据。您的应用程序应该知道如何执行此操作,因为它知道如何设置单元格。

https://developer.apple.com/library/mac/documentation/general/conceptual/devpedia-cocoacore/MVC.html