急!传值传不过去,输出的值为null

有两个界面,第一个界面tableview

  • (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ PlayerViewController *playerVC=[[PlayerViewController alloc]init]; playerVC.link=@"ggggggggg"; [self presentViewController:playerVC animated:YES completion:nil]; }

第二个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];