我在UITableViewCells中有一个带有文本字段的Grouped TableView。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if(indexPath.section < 6) {
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)];
textField.tag = indexPath.section + 22;
textField.delegate = self;
[cell.contentView addSubview:textField];
[textField release];
}
return cell;
}
因此,当我按下Save按钮时,将调用saveItem方法:
- (void)saveItem {
NSMutableArray *textFieldArray = [[NSMutableArray alloc] init];
for (int i = 0; i <6; i++) {
[textFieldArray addObject:(UITextField *)[self.view viewWithTag:22+i]];
}
...
}
我可以毫无问题地更改前4个TextField的值。它们也被保存,但是当我更改第5或第6个文本字段中的值时,我的应用程序崩溃并且出现错误:
*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'* - [NSMutableArray insertObject:atIndex:]:尝试将nil对象插入0'
有什么建议吗?
到目前为止,谢谢。
答案 0 :(得分:0)
我认为问题在于:当您点按保存按钮时,并非显示所有部分。因此,当您尝试使用标记5和6访问view
时,它们为零,因为它们未显示,因此未从视图中添加(或已删除)。
要对此进行测试,只需尝试滚动到tableView
的底部,然后尝试点按保存按钮。
答案 1 :(得分:0)
1.你试图访问该对象的时间是不可用的。这意味着[self.view viewWithTag:22 + i]给出nil。
2.tableview不会为所有单元格分配内存。它只分配你可以看到的内存。
3.once滚动你的桌面视图,一旦看到第6部分,然后按下保存按钮你的应用程序不会崩溃。
答案 2 :(得分:0)
只需要修改你的代码
if(indexPath.section <= 6) {
UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 10,580, 31)];
textField.tag = indexPath.section + 22;
textField.delegate = self;
[cell.contentView addSubview:textField];
[textField release];
}
答案 3 :(得分:0)
另外,尽量不要在cellForRowAtIndexPath
中创建文字字段。您应该使用init
或viewDidLoad
方法创建它。