设置UITableViewCell:textLabel:text时应用程序崩溃



我正在创建一个拆分视图的iPad应用程序。当用户按下主视图中的条形按钮项目时,将显示一个模态。此模态有一个文本字段,并有一个用于获取键盘返回的IBAction。

在键盘返回时,我的Farm类的一个新实例被创建(下面的代码)。然后将此实例添加到存储在我的委托中的数组中。然后我尝试重新加载MasterViewController的表。重新加载后,应用程序在cell.textLabel.text上崩溃,并出现EXC_BAD_ACCESS错误。

Farm *current = [delegate.arrayOfFarms objectAtIndex:indexPath.row];
cell.textLabel.text = [current getFarmTitle];

如果我问委托中的数组有多少元素,它确实会显示当前的数量。这就是我对整件事感到奇怪的地方:农场的例子似乎存在。

我的MasterViewControllerNewFarmNamingView类中都有AppDelegate实例。Master中的实例用于填充表。NewFarm中的实例是将新创建的Farm添加到委托中。下面的代码。

NewFarmNamingView:类中的分段

- (IBAction) keyboardDonePushed:(id)sender
{
    // create a Farm and add it to the delegate
    NSString *text = newFarmTextField.text;
    Farm *newFarm = [[Farm alloc] init];
    [newFarm setFarmTitle:text];
    [[delegate arrayOfFarms] addObject:newFarm];
    [newFarm release];
    NSLog(@"Added farm: %@" , text);
    // dismiss the view
    [self closeView:nil];
}
- (void)viewDidLoad
{
    [super viewDidLoad];
    // initialize the delegate
    delegate = [[UIApplication sharedApplication] delegate];
}

农场类别的细分市场

- (void) setFarmTitle : (NSString *) _farmTitle
{
    farmTitle = _farmTitle;
}
- (NSString *) getFarmTitle
{
    return farmTitle;
}
// NSCoding Methods
- (void) encodeWithCoder:(NSCoder *)aCoder
{
    [aCoder encodeObject:farmTitle forKey:@"kFarmTitle"];
}
- (id) initWithCoder:(NSCoder *)aDecoder
{
    farmTitle = [aDecoder decodeObjectForKey:@"kFarmTitle"];
    return self;
}
// Initialization method
- (id)init
{
    self = [super init];
    if (self) {
        // Initialization code here.
    }
    return self;
}

从运行时引用:"objc_msgsend向接收器发送消息,并期望一个简单的返回值。"

我敢打赌,你在类方法getTitleFarm中返回的(如果你返回任何东西的话)是返回了一个不正确的值。它应该是一个NSString。请确保它返回的是NSString,而不是其他任何内容。

如果您需要使用respondsToSelector方法来查看类是否正在发布,请尝试:

if([current respondsToSelector:@selector(getFarmTitles)])  {.    [current getFarmTitle];
} 
else {
NSLog:(@"FAILURE!!");
}

编辑:也许你根本没有保留甚至没有创建这个字符串。在初始化过程中,将其封装在retain];消息

最新更新