将字符串分配给单元格标签的文本时,EXC_BAD_ACCESS崩溃

时间:2013-09-04 07:02:44

标签: ios objective-c uitableview

 self.detailTextLabel.text = self.eventAssociation.associatedEvent.searchScheduleString;

有时在向上和向下滚动tableView时,我会在此行发生崩溃,其中消息为EXC_BAD_ACCESS (code = 1, address =0xsomething-something)

崩溃后我尝试在调试器控制台上打印self.eventAssociation.associatedEvent.searchScheduleString,我得到了字符串的值。

我再次对序列负责。我想可能是因为我的模型eventAssociation被分配并且被释放了但是我仍然指的是一个解除分配的对象的旧地址,所以使模型成为保留属性。但是我有时会遇到这种崩溃。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

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

    }


    if(nil != self.customTableDataSource)
    {
        if(indexPath.section < self.customTableDataSource.count)
        {
            NSArray *eventArray = [self.customTableDataSource objectForKey:[[self.customTableDataSource allKeys] objectAtIndex:indexPath.section]];
            [cell setEventAssociation:[eventArray objectAtIndex:indexPath.row]];
            [cell updateFromModel];

        }

    }


    return cell;
}

这是我的cellForRowAtIndexPath方法,其中我设置了TheEventAssociation模型,然后调用updateFromModel,然后使用新的模型值更新标签。

这是updateFromModel的代码,

-(void)updateFromModel
{
    self.detailTextLabel.text = self.eventAssociation.associatedEvent.searchScheduleString;
    CGSize sizeForSchedule = [self.eventAssociation.associatedEvent.searchScheduleString sizeWithFont: self.detailTextLabel.font];

    CGRect frame = self.detailTextLabel.frame;
    frame.size =  sizeForSchedule;
    frame.origin.x = self.frame.size.width - (sizeForSchedule.width + 20) ;

    self.detailTextLabel.frame = frame;


    // find out where title should end
    CGFloat titleEndX =  self.detailTextLabel.frame.origin.x - 20;
    frame = self.eventTitle.frame;
    frame.size.width = titleEndX - frame.origin.x;
    self.eventTitle.frame = frame;
    self.eventTitle.text= self.eventAssociation.associatedEvent.eventName;

    // Adjusting size of cell based on text
    [self setNeedsLayout];

}

第一行是我遇到崩溃的地方。可能是什么原因?

2 个答案:

答案 0 :(得分:0)

据我所知EXC_BAD_ACCESS表示您正在尝试使用已发布的对象。因此,请尝试将对象保留在发生崩溃问题的位置。

答案 1 :(得分:0)

尝试将您的财产设为&#34;复制&#34;或者当你初始化你的字符串&#34; searchScheduleString&#34;尝试self.eventAssociation.associatedEvent.searchScheduleString = [stringValue copy];