我的班级中有一个名为alphabets的NSMutableString。我把[alphabets characterAtIndex:i]或[alphabets length]放在tableView:cellForRowAtIndexPath:中。但是当我使用reloaddata时,应用程序会崩溃。
编辑:我应该使用tableView外的字母表进行所有计算,然后将值数组传递给tableView。
这是“字母”出现的地方
@interface 中的
NSMutableString *alphabets;
@implementation
- (IBAction) textFieldDoneEditing: (id)sender {
Logic *myLogic = [[Logic alloc] init];
alphabets = [NSMutableString stringWithCapacity:0];
alphabets = [myLogic formatSentence: sentenceTextField.text];
alphabets = [myLogic makeAscending: alphabets];
[logicTable reloadData];
// removes keyboard
[sentenceTextField resignFirstResponder];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
MyTableCell *cell = (MyTableCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[MyTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
// this causes all the problem
cell.textLabel.text = alphabets;
return cell;
}
答案 0 :(得分:1)
只是在没有看到任何代码的情况下猜测,但是在调用cellForRowAtIndexPath时,“字母表”已经被垃圾收集......?或者你已经保留了它吗?
向我们展示一些代码段。一个创建/实例化“字母”和一个用它的地方......
编辑:
根据您在问题中添加的代码段,它看起来像您可能需要的那样:
[alphabets retain];
在您最后一次分配到“字母”后 - 我不能肯定地说没有看到“[myLogic makeAscending:alphabets]”的实现 - 如果它调用一个返回临时字符串的方法,那么,'我需要保留它以将其保存在成员变量(ivar)中。
当然,由于您需要保留它以在整个对象的生命周期内访问它,因此您还必须在dealloc的实现中适当地发布它。
答案 1 :(得分:0)
您的应用崩溃的原因可能是因为您在cellForRowAtIndexPath中调用reloadData。 reloadData将导致cellForRowAtIndexPath再次触发,并且您将陷入无限循环,直到内存不足为止。尝试在cellForRowAtIndexPath中设置断点,并观察它的发生
答案 2 :(得分:0)
我会做像
这样的事情if (alphabets) {
cell.textLabel.text = alphabets;
}
因为从您的示例代码中看起来您可能正在从未初始化的指针分配textLabel.text,直到有人编辑textField。