使用instantiateViewControllerWithIdentifier将变量传递给另一个视图控制器

时间:2013-04-15 07:13:24

标签: ios objective-c properties storyboard

.m文件,我正在尝试设置message变量:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    SingleMessageViewController* vc = (SingleMessageViewController*)[self.storyboard instantiateViewControllerWithIdentifier:@"SingleMessageViewController"];
    vc.message = [tableView cellForRowAtIndexPath:indexPath].textLabel.text;
    [self.navigationController pushViewController:vc animated:true];
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
视频控制器的

.h文件我正在实例化:

@interface SingleMessageViewController : POSCommonViewController
{
    NSString *message;
}

@property (nonatomic, retain) NSString *message;
@end
视频控制器的

.m文件我正在实例化(仅viewDidLoad方法):

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"%@", self.message);
}
引用的最后一个文件中的

NSLog返回nil(查看加载没有任何问题)。我试过改变属性等等 - 没有什么对我有用。这可能是什么问题?

2 个答案:

答案 0 :(得分:0)

所选单元格的textLabel属性可能为零。使用中间字符串变量来获取单元格的文本,然后将消息设置为该文本。当您逐步调试调试器中的第一个方法时,它会让您更容易看到消息。

答案 1 :(得分:-1)

不可行。您在第一个控制器内创建控制器的对象,并为该特定对象设置属性。那么如何在新控制器对象中访问它?为此,您可以使用以下方法:

1.您可以在第二个视图控制器中覆盖initWithMessage:(NSString *)message

的init方法

2.您可以在appDelegate类中添加该属性。这将通过应用程序共享。

3.但如果你想在课堂上分享任何东西,最好的方法是制作单身课程。