2013-09-02 6 views
0

Мне нужно передать NSString другому моему ViewController, но он продолжает возвращать нуль.segue data pass возвращает nil

//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; 
    } 

} 

Вот где я объявляю NSString:

@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; 
    } 

Что такое правильный способ передачи данных между этими двумя контроллерами View? Мои переменные остаются ноль.

ответ

1

Проблема заключается в том, что вы создаете новый ChatViewController, это не тот, который собирается segue. Вы должны получить этот контроллер из свойства destinationViewController segue.

- (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

спасательный жилет! Имейте upvote –

1

// Получить ссылку на контроллер представления назначения

ChatViewController * ChatViewController = [destinationViewController непосредственно перейти];

Смежные вопросы