2012-01-12 6 views
2

スプリットビューのiPadアプリケーションを作成しています。ユーザーがマスタービューのバーボタン項目を押すと、モーダルが表示されます。このモーダルにはテキストフィールドがあり、キーボードリターンを受け取るためのIBActionがあります。App設定がクラッシュするUITableViewCell:textLabel:text

キーボードが戻ると、Farmクラスの新しいインスタンスが作成されます(下のコード)。このインスタンスは、私のデリゲートに格納されている配列に追加されます。私はMasterViewControllerのテーブルをリロードしようとします。このリロード時に、EXC_BAD_ACCESSエラーでcell.textLabel.textにアプリケーションがクラッシュします。

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

デリゲート内の配列に何個の要素があるかを尋ねると、現在の量も実際に表示されます。これは私にとって、この全部について奇妙なことです:ファームのインスタンスが存在するように見えます。

私は、MasterViewControllerと私のNewFarmNamingViewクラスの両方にAppDelegateのインスタンスを持っています。マスターのインスタンスは、テーブルを移入することです。 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; 
} 
+0

デバッグコンソールにはどのようなエラーが表示されますか? – UIAdam

+0

受信した信号で質問を更新しました。デバッグスタックの先頭が「[UILabel setText:]」のすぐ上にある「objc_msgSend」です –

+0

getFarmTitleが壊れている可能性はありますか? respondsToSelector:メソッドでラップしてみてください。 – CodaFi

答えて

1

「objc_msgsendは、受信機にメッセージを送信し、簡単なリターンを期待値。"

そのクラスメソッドgetTitleFarmが返す値が正しくない場合は、何かを返す場合は何も返されません。それはNSStringでなければなりません。絶対にそれがNSStringを返していることを確認してください。

あなたはクラスがリリースされているかどうかを確認するためにrespondsToSelectorメソッドを使用する必要がある場合は、試してみてください。

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

はEDIT:多分あなたが保持されていないか、まったくこの文字列を作成します。初期化ではretain];というメッセージで囲みます

+1

'retain'関数はNSStringは状況を修正しました。あなたは命の恩人です!:-) –

+0

問題ありません。これで幸運。 – CodaFi

関連する問題