2013-09-02 5 views
0

NSString을 다른 ViewController에 전달해야하지만 이는 nil을 계속 반환합니다. 여기segue 데이터 전달은 nil을 반환합니다.

@interface ChatViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, MessageDelegate> { 
UITextField  *messageField; 
NSString  *chatWithUser; 
UITableView  *chatTableView; 
NSMutableArray *messagesArray; 
} 

@property (nonatomic,retain) IBOutlet UITextField *messageField; 
@property (nonatomic,retain) NSString *chatWithUser; 
@property (nonatomic,retain) IBOutlet UITableView *chatTableView; 

- (IBAction) sendMessage; 

@end 

과는 여전히 nil을 :

@synthesize chatWithUser; 
    - (void)viewDidLoad { 
     [super viewDidLoad]; 
     //DO STUFF WITH chatWithUser; ADDED BREAKPOINT AND chatWithUser = nil; 
     //ALSO TRIED viewWillAppear; 
    } 

이 두보기 컨트롤러간에 데이터를 전달하는 올바른 방법은 무엇입니까 나는있는 NSString를 선언 할 경우 다음

//prepareForSegue is called from didSelectRowAtIndexPath 
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if([[segue identifier] isEqualToString:@"chat"]) { 
     NSString *userName = (NSString *) [toUsersArray objectAtIndex:[self.chatsTableView indexPathForSelectedRow].row]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

    ChatViewController *chatViewController = [storyboard instantiateViewControllerWithIdentifier:@"ChatViewController"]; 
    //[chatViewController setChatWithUser:userName]; EVEN TRIED: 
    chatViewController.chatWithUser = username; 
    } 

} 

은? 내 변수는 그대로 유지됩니다.

답변

1

문제는 당신이 새로운 ChatViewController를 인스턴스화하는 것이고, 이것은 Segue가 갈 예정이 아닌 것입니다. segue의 destinationViewController 속성에서 해당 컨트롤러를 가져와야합니다.

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if([[segue identifier] isEqualToString:@"chat"]) { 
     NSString *userName = (NSString *) [toUsersArray objectAtIndex:[self.chatsTableView indexPathForSelectedRow].row]; 

    ChatViewController *chatViewController = segue.destinationViewController; 
    chatViewController.chatWithUser = username; 
    } 
} 
+0

생명의 은인! 업보트를 가져라. –

1

// 대상 뷰 컨트롤러

ChatViewController * ChatViewController 참조 얻기 = destinationViewController SEGUE];

관련 문제