【问题标题】:objective c memory/pointer issue on passing values from prepareForSegue to another viewcontroller将值从 prepareForSegue 传递到另一个视图控制器的目标 c 内存/指针问题
【发布时间】:2016-03-20 18:17:55
【问题描述】:

我正在尝试将数据从 1 个视图控制器传递到另一个,但 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" - 一切都会按预期工作。

如果有人可以帮助我,我已经坚持了一段时间,我将不胜感激。谢谢!

【问题讨论】:

  • 尝试在viewWillAppear 中使用payeeNameText 而不是viewDidLoad
  • 你确定self.payeeName 不是nil
  • 谢谢大家的建议。我已经更新了帖子,但我认为它与设置或分配位置没有任何关系,因为如果我在 prepareForSegue 中为 self.payeeNameText 硬编码一个文字字符串,一切正常。
  • 尝试记录self.payeeName 的值。 (顺便说一句,你为什么使用stringWithFormat ?)

标签: ios objective-c uiviewcontroller segue


【解决方案1】:

原来我试图显示从 http get 请求返回的数据,但我在按钮单击和返回的数据上显示模态序列。因此,似乎存在竞争条件并且数据设置不正确。

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

所以解决方案是从我的按钮中删除我的 segue 并将其附加到我的视图控制器,然后在我的 get 请求返回后仅调用 1 次。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    相关资源
    最近更新 更多