2

我有一个导航视图 iPhone 应用程序。我创建了一个简单的对象,它有一个“名称”NSString 和一个“重量”NSNumber。加载单元格时,此应用程序不断崩溃。这是方法:

// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

static NSString *CellIdentifier = @"Cell";

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
}

// Configure the cell...
factor *toAdd = [factors objectAtIndex:indexPath.row];

cell.textLabel.text = toAdd.name;
cell.detailTextLabel.text = [toAdd.weight stringValue];
    // ^ crashes here...
    // stringByAppendingString:@"%"];

return cell;
}

在 NSNumber 上调用 stringValue 方法时,我在控制台上收到“发送到已释放实例的消息”。我不明白为什么会这样。上面的行访问名称没有问题,我没有 [release] 语句。

谢谢

编辑:这是我的因素的 init 方法。我仔细检查了重量是(保留,非原子)并在实现中合成,就像名字一样。

- (id) init{
if( self = [super init] )
{
    weight = [NSNumber numberWithInt:10];
    name = @"Homework";
}
return self;
}
4

2 回答 2

1

您没有在 init 中使用属性设置器方法。因此不保留对象。

试试这个:

- (id) init{
if( self = [super init] )
{
    self.weight = [NSNumber numberWithInt:10];
    self.name = @"Homework";
}
return self;
}

为避免此类错误,您可以使用以下方法综合属性:

@synthesize name = _name;
于 2012-06-07T18:32:21.477 回答
0

能否成功访问该属性与该属性是否已被释放name无关。weight所有这一切都告诉你,你factor的生活很好,它name也很好。我猜你weightfactor.

编辑:使用添加的代码,这绝对是您正在做的事情。

于 2012-06-07T18:18:26.847 回答