2013-02-02 169 views
0

我有一个简单的设置,使用一个viewcontroller(MainViewController)通过代理与另一个(JoinedViewController)交谈的故事板。一切都很好,直到prepareForSegue。在那里,我正在为接收视图控制器声明roomData和标签的文本,但都没有收到。代表未接收数据

MainViewController.m

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    if ([segue.identifier isEqualToString:@"JoinRoom"]) { 
     UINavigationController *navigationController = segue.destinationViewController; 
     JoinedViewController *joinedViewController = [[navigationController viewControllers]objectAtIndex:0]; 
     joinedViewController.label.text = self.roomName; 
     joinedViewController.roomData = self.roomData; 
     joinedViewController.delegate = self; 
    } 
} 

MainViewController.h delcarations:

@interface MainViewController : UIViewController <JoinedViewControllerDelegate, UITextFieldDelegate> 

@property (weak, nonatomic) IBOutlet UITextField *textField; 
@property (nonatomic, copy) NSString *roomName; 
@property (nonatomic, weak) S3ListObjectsResult *roomData; 

JoinedViewController.h声明:

@interface JoinedViewController : UITableViewController 

@property (nonatomic, weak) id <JoinedViewControllerDelegate> delegate; 
@property (nonatomic, weak) S3ListObjectsResult *roomData; 
@property (weak, nonatomic) IBOutlet UILabel *label; 
+0

尝试使用@property(nonatomic,assign)id delegate; ,请确保合成,但不要在JoinedViewController中释放委托。 –

回答

1

我认为你有两个不同的问题。 roomData应该声明为强,而不是弱(在两个类中)。 roomName的问题不是字符串本身,而是在JoinedViewController的viewDidLoad甚至被调用之前试图将它设置在标签上的事实。在加载视图之前,您无法访问其他控制器的UI元素。您应该传递字符串roomData,并将其设置在JoinedViewController的viewDidAppear方法的标签上。

+0

你是什么意思,当你说“你应该传递字符串,房间数据,并将其设置在标签中...”?我怎样才能从Main中传入roomData? – user592419

+0

@ user592419,它意味着在JoinedVC中创建一个字符串属性,并且就像使用roomData所做的那样:joinedViewController.roomName = self.roomName。然后在viewDidAppear中,self.label.text = self.roomName – rdelmar

+0

谢谢,这真的很有帮助。 – user592419