0

I need to pass a NSString to my other ViewController but it keeps returning 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;
    }

}

Here is where I declare the 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

and here its still nil:

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

What is the right way to pass data between these two View Controllers? My variables stay nil.

4

2 回答 2

2

问题是您正在实例化一个新的 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;
    }
}
于 2013-09-02T16:17:31.830 回答
1

// 获取目标视图控制器的引用

ChatViewController *ChatViewController = [segue destinationViewController];

于 2013-09-02T16:54:11.413 回答