NSMutableArray:发送到解除分配的图像的消息

时间:2011-12-11 19:18:34

标签: objective-c nsmutablearray

我面临一个与NSMutableArray有关的奇怪问题。我搜索了几个类似的帖子,但没有运气。情况是这样的: 在我的appDelegate中,我声明了一个NSMutableArray属性,如下所示:

@property (nonatomic, retain) NSMutableArray *myRequests;

然后在同一个类的方法中,我像这样初始化数组:

self.myRequests = [[[NSMutableArray alloc] init] autorelease];

然后在同一方法的for循环中,我将对象添加到数组中:

while(sqlite3_step(compiledStatement) == SQLITE_ROW) {
    MyRequest *req = [MyRequest alloc];

    req.s_prp= [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 1)];
   .
   .
   .
  [self.myRequests addObject:req];


  [req release];
}

我使用此数组为数据提供uitableview。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

 // Cell initialization ...

    MyRequest *req = (MyRequest *) [delegate.myRequests objectAtIndex:indexPath.row] ;
    cell.stypeLabel.text = req.ser_type_name; // RANDOMLY OCCURING ERROR !!!!!!!!!!!
}

异常随机发生并且消息显示:[MyRequest ser_type_name]:发送到解除分配的实例0x6e7af20的消息

以上代码有什么问题吗? MyRequest是一个自定义类。我正在使用自定义tableviewcell类。

MyRequest类非常简单。它有几个属性

@property (retain,nonatomic)    NSString *ser_type_name;

和释放对象的dealloc方法。

由于

2 个答案:

答案 0 :(得分:2)

此行不正确:

MyRequest *req = [MyRequest alloc];

应该是:

MyRequest *req = [[MyRequest alloc] init];

可能还有其他错误,但那个错误非常明显。

答案 1 :(得分:0)

您没有显示如何定义MyRequest及其属性/ ivars,而不显示如何在代码中设置req.ser_type_name。根据它们是否被保留,您可能会看到一些奇怪的行为,因为NSString的stringWithUTF8String返回一个自动释放的字符串。您应该检查并在必要时进行修复(虽然我看不出有什么错误会给您报告的消息)