无法在tableView中放置方法:cellForRowAtIndexPath:

时间:2011-04-05 17:23:13

标签: iphone objective-c cocoa-touch uitableview

我的班级中有一个名为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;
}

3 个答案:

答案 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。