2013-02-02 175 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