将值从prepareForSegue传递到另一个viewcontroller的目标c内存/指针问题

时间:2015-12-15 04:21:24

标签: ios objective-c uiviewcontroller segue

我正在尝试将数据从1个viewcontroller传递到另一个,但是NSString在某处丢失了。我提前道歉,我觉得我在这里丢失了一些愚蠢的东西。我已经阅读了很多这方面的帖子,但我无法弄清楚为什么我的NSStrings在视图之间迷失了。如果有人能给我指针我真的很感激:

ViewController1将payee.name传递给ViewController2 payeeNameText:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
    if([segue.identifier isEqualToString:@"makePayment"]){
        VC2* paymentController = (VC2*)[segue destinationViewController];
        paymentController.payeeNameText = [payee.name copy];
    }
}

ViewController2尝试使用该数据在payeeName UILabel中显示收款人姓名:

- (void)viewDidLoad {

    [super viewDidLoad];
    NSLog(@" test %@",  self.payeeNameText);
   self.payeeName.text = [NSString stringWithFormat:@"%@",    self.payeeNameText];
    }

它在NSLog语句中正确打印出来,但文本字段显示为null。我在点击一个按钮之后也打印出相同的变量,并且它也在那里。

这是我在View Controller 2头文件中对收款人的定义:

@property (nonatomic, copy) NSString *payeeNameText;

以及我对文本字段的定义:

@property (nonatomic) IBOutlet UILabel *payeeName;

如果我将paymentController.payeeNameText设置为字符串文字,例如@“test” - 一切都按预期工作。

如果有人能帮助我,我已经坚持了一段时间,我会非常感激。谢谢!

1 个答案:

答案 0 :(得分:0)

它转向我试图显示从http获取请求返回的数据,但是我在按钮单击时显示模态segue并返回返回的数据。因此,似乎存在竞争条件且数据未正确设置。

首先,我将我的segue改为"显示" - 这最终向我展示了2个单独的屏幕1,没有数据,然后用数据替换了一个(这就是我发现这个错误的方式)

所以解决方法是从我的按钮中删除我的segue并将其附加到我的View Controller,然后在我的get请求返回后只调用一次。