2013-02-02 2 views
0

하나의 viewcontroller (MainViewController)와 하나의 대리자를 통해 다른 (JoinedViewController)에게 이야기하는 스토리 보드를 사용하여 간단한 설정을했습니다. prepareForSegue까지 모든 것이 잘됩니다. 거기에, 나는받는 viewcontroller에 대한 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 (비 원자, 할당) id를 사용 해보세요. delegate; JoinedViewController에서 대리자를 합성하지만 릴리스하지 않도록하십시오. –

답변

1

나는 당신이 두 가지 문제가있다 생각합니다. roomData는 weak (두 클래스 모두)이 아니라 강하게 선언되어야합니다. roomName의 문제는 문자열 자체가 아니라 JoinedViewController의 viewDidLoad가 호출되기 전에 레이블에 설정하려고한다는 사실입니다. 뷰가로드 될 때까지 다른 컨트롤러의 UI 요소에 액세스 할 수 없습니다. 대신 roomData 문자열을 전달하고 JoinedViewController의 viewDidAppear 메서드에서 레이블에 설정해야합니다.

+0

"대신 roomData 문자열을 전달해야하고 레이블에 설정하면 ..."이라고 할 때 무엇을 의미합니까? Main에서 roomData를 어떻게 전달할 수 있습니까? – user592419

+0

@ user592419, 이는 JoinedVC에 문자열 속성을 만들고 roomData : joinedViewController.roomName = self.roomName에서했던 것처럼 수행해야합니다. 그런 다음 viewDidAppear에서 self.label.text = self.roomName – rdelmar

+0

정말 고마워. – user592419