我正在创建一个拆分视图的iPad应用程序。当用户按下主视图中的条形按钮项目时,将显示一个模态。此模态有一个文本字段,并有一个用于获取键盘返回的IBAction。
在键盘返回时,我的Farm
类的一个新实例被创建(下面的代码)。然后将此实例添加到存储在我的委托中的数组中。然后我尝试重新加载MasterViewController
的表。重新加载后,应用程序在cell.textLabel.text
上崩溃,并出现EXC_BAD_ACCESS
错误。
Farm *current = [delegate.arrayOfFarms objectAtIndex:indexPath.row];
cell.textLabel.text = [current getFarmTitle];
如果我问委托中的数组有多少元素,它确实会显示当前的数量。这就是我对整件事感到奇怪的地方:农场的例子似乎存在。
我的MasterViewController
和NewFarmNamingView
类中都有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];
消息