我有一个导航视图iPhone应用程序。我创建了一个简单的对象,它具有'name'NSString和'weight'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方法时,我在控制台上收到“发送到deallocated instance的消息”。我不明白为什么会这样。上面的行没有问题访问该名称,我没有[发布]声明。
谢谢
编辑: 这是我的因素的init方法。我仔细检查并且重量是(保留,非原子)并在实现中合成,就像名字一样。
- (id) init{
if( self = [super init] )
{
weight = [NSNumber numberWithInt:10];
name = @"Homework";
}
return self;
}
答案 0 :(得分:1)
您没有在init中使用属性setter方法。因此,不保留对象。
试试这个:
- (id) init{
if( self = [super init] )
{
self.weight = [NSNumber numberWithInt:10];
self.name = @"Homework";
}
return self;
}
要避免这些类型的错误,您可以使用以下方法合成属性:
@synthesize name = _name;
答案 1 :(得分:0)
能够成功访问name
属性与weight
属性是否尚未发布无关。所有这些都告诉你,你的factor
还活着,并且它的name
也很活跃。我猜你没有在weight
的实施中正确保留factor
财产。
编辑:添加了代码,肯定你在做什么。