0

私はデータを持つtableviewcontrollerを持っています。ユーザーがセルをタップしたときにプッシュされる新しい詳細ビューを取得しようとしています。ロードするビューを取得することはできますが、データをより詳細に表示するラベルは更新されません。コードは次のとおりです。データがプッシュされたときにビューコントローラに渡されない

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

SearchDetailViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"searchDetailVC"]; 
Events *event = [events objectAtIndex:indexPath.row]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
NSString *dateString = [dateFormatter stringFromDate:event.eventDate]; 

controller.title=event.eventName; //ONLY ONE THAT WORKS! 


controller.eventName.text = event.eventName; 
controller.eventAddress.text = event.eventAddress; 
controller.eventDate.text = dateString; 
controller.eventTime.text = event.eventTime; 
controller.ratingView.image = [self imageForRating:event.eventRating]; 
controller.eventDistance.text = @"NOT YET IMPLEMENTED"; 

[self.navigationController pushViewController:controller animated:YES]; 
} 

設定されているプロパティは、NavigationController navbarのタイトルだけです。私は何か劇的に間違っているのですか?

+1

は、ビューの要素を指し示すeventName、eventAddressなどのアウトレットですか?新しいコントローラを押した時点でビューがロードされていないように見えます。おそらくビューコントローラのインスタンス変数にそれらを格納し、次に 'viewDidLoad'にUI要素を設定しますか? –

答えて

1

このようなデータを渡すことはできません。ビューがまだロードされていないので、ViewController.domainFieldはその時点ではnilであり、ビューコントローラオブジェクトが作成された時点ではなく、ビューがロードされるときにlabel/TextFieldが作成されます。

このコードは同様に、あなたが別のビューにあるビューからすべてのデータを渡す必要があなたに

SearchDetailViewController.h 
    #import <UIKit/UIKit.h> 
    @interface SearchDetailViewController : UIViewController 
    { 

     NSString* eventNameString ; 
     NSString* eventAddressString; 
     ........... 
     ............. 

    } 
    @property (nonatomic,retain) NSString* eventNameString ; 
    @property (nonatomic,retain) NSString* eventAddressString; 
    ............... 
    ............... 
    @end 


SearchDetailViewController.m 
- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    eventName.text=eventNameString; 
    eventAddress.text=eventAddressString; 
    .......................... 
    .......................... 
    eventNameString=[[NSString alloc]initWithString:@""]; 
} 


TableView.m 

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

[tableView deselectRowAtIndexPath:indexPath animated:YES]; 

SearchDetailViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"searchDetailVC"]; 
Events *event = [events objectAtIndex:indexPath.row]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateStyle:NSDateFormatterLongStyle]; 
NSString *dateString = [dateFormatter stringFromDate:event.eventDate]; 

controller.title=event.eventName; //ONLY ONE THAT WORKS! 


controller.eventNameString=[[NSString alloc]initWithString:event.eventName]; 
controller.eventAddressString=[[NSString alloc]initWithString:eventAddress]; 
............................... 
............................... 
............ 

[self.navigationController pushViewController:controller animated:YES]; 
} 

を助けることができる - あなたが直接コントローラに割り当てることはできません。

+0

ありがとう、私は実装しましたが、コードが '[self.navigationController:controller animated:YES]、' 'エラーを受け取りました。' 'キャッチされていない例外 'NSUnknownKeyException' : '[ setValue:forUndefinedKey:]:このクラスはキーbuyButtonに対してキー値コーディングに準拠していません。今、私はこのボタン(セル上にある)へのすべての参照を削除し、ボタン自体も削除しました。なぜこれも参照されていますか? –

関連する問題