有两个界面,第一个界面tableview
第二个PlayerViewController :
@property (nonatomic,retain)NSString *link;
但是输出link却为null
在viewDidLoad中访问self.link拿不到传递过去的值吗? 正常情况下是可以拿到传递过来的值的。
你在哪打印的,我在- (void)viewDidLoad里打印没有问题
看一下你的界面切换方式是否有问题,这是我项目里界面转换的代码,你可以参考一下
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil];
GoodsViewController *goodsView = [storyboard instantiateViewControllerWithIdentifier:@"GoodsViewController"];
sRThreeVCModel = [[SRThreeVCModel alloc]init];
goodsView.sRThreeVCModel = sRThreeVCModel;
[self presentViewController:goodsView animated:YES completion:nil];
两个controller都有srthreevcmodel属性
其中还要在GoodsViewController的UI那里设置StoryBoardId为“GoodsViewController”
add method as follows:
forceSetLink(input)
{
link = input
}
你不会是在 init 或者 initwitiNib... 里面 打印的吧 ,如果是的话 肯定 为 null
init 执行的时候 ,你还没有赋值呢 ,写到 viewdidload 里面 应该是 没问题的
你的对象是局部变量 怎么可能拿到
首先,你这个方法走了么,没走指定传不了呀
肯定是在 init中打印的,还没走playerVC.link=@"ggggggggg"这句话呢,怎么可能有值
你可以设断点在那个赋值语句,然后执行程序,是否会触发?假如你没有执行那段程序,自然数据也是没有的
首先代码格式是这么写的吗?注意写代码的格式。
要是按照你这样写的话是不会有问题的。
prepareForSegue这个方法没有实现吧
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
// 要这这里传值
}
理论上没问题,这么写没问题。
你在PlayerViewController的init方法里面进行了打印,这个时候link还没有进行初始化。可以在PlayerViewController里面写一个初始化方法:
- (instancetype)initWithLink:(NSString *)link {
self = [super init];
if(self) {
self.link=link;
}
return self;
}
直接在init的时候就对link进行赋值。
如果解决不了的话,你把retain改成copy试试。
@property (nonatomic,copy)NSString *link;
你的传值方式错了
playerVC.link=@"ggggggggg"这种传值是属于导航跳转传值的
比如 :
PlayerViewController *playerVC = [[PlayerViewController alloc] init]
playerVC.str = @"ssssss";
[self.navigationController pushViewController:playerVC animated:YES];
而present传值是这样的
PlayerViewController *playerVC = [[PlayerViewController alloc] init]
[playerVC setValue:“sssss” forKey:@"link"];
[self presentViewController:playerVC animated:YES completion:nil];