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导航栏的标题。我在做什么大错特错?

+1

是指向视图中元素的eventName,eventAddress等出口?看起来像在你推新控制器的时候视图没有被加载。也许将它们存储在视图控制器的实例变量中,然后在'viewDidLoad'中设置UI元素? – 2012-01-10 07:08:05

回答

1

你不能传递这样的数据。 ViewController.domainField当时为零,因为视图还没有加载,并且当视图加载时(通过笔尖)而不是视图控制器对象被创建时,标签/ 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 pushViewController:controller animated:YES];'我得到错误'***终止应用程序由于未捕获的异常'NSUnknownKeyException',原因:'[ setValue:forUndefinedKey:]:该类不是关键字值,它是关键字buyButton.''的编码标准。现在我已经删除了这个按钮的所有引用(它在单元格上),甚至删除了按钮本身。为什么这甚至被提及? – 2012-01-10 17:49:12

相关问题