gpt4 book ai didi

ios - 在 ViewController 之间推送数据不起作用

转载 作者:行者123 更新时间:2023-11-29 00:02:17 26 4
gpt4 key购买 nike

我正在实现一个简单的游戏,在该游戏中,用户尝试猜测一张随机选择的纸牌。他们从双组件选择器(在 FirstViewController 中)中选择他们的猜测,然后在下一个屏幕(SecondViewController 中)他们可以检查他们是否正确。我现在正试图将用户选择的猜测传递给他们可以检查的屏幕。

在 SecondViewController.h 中,我声明了猜测的两个部分(数字和花色)的属性,如下所示:

@property (nonatomic, assign) NSString * guessNumber;
@property (nonatomic, assign) NSString * guessSuit;

然后在 FirstViewController.h 的 didSelectRow 中,我试图像这样向前传递信息:

- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
SecondViewController *secondVC = [[SecondViewController alloc] init];
if (component == 0){
secondVC.guessNumber = _cardNumbers[row];
}else{
secondVC.guessSuit = _cardImages[row];
}
[self.navigationController pushViewController:secondVC animated:YES];

}

在 SecondViewController 的 viewDidLoad 中,我对 guessNumber 和 guessSuit 的值进行了 NSLog,但它为两者打印出 null。

很明显,我在某处出错了,数据实际上并没有被传递,如果有人对我需要修复的内容有任何指导,那就太棒了!

编辑:我现在将值更改为复制而不是分配,如下所示:

@property (nonatomic, copy) NSString * guessNumber;
@property (nonatomic, copy) NSString * guessSuit;

我也试过 strong ,都没用。奇怪的是,如果我在分配后立即打印出值,就像这样:

secondVC.guessNumber = _cardNumbers[row];
NSLog(secondVS.guessNumber);

我得到了正确的值。现在我更加困惑了,因为当我实际转到我的第二个 View Controller 时,它似乎正在分配值但没有保存它。

最佳答案

assign 告诉 NSString * 属性 setter 保存指针地址而不是 OC 对象本身。

_cardNumbers[row]_cardImages[row] 都返回一个自动释放的对象,该对象将在您完成 didSelectRow 方法后释放,​​因此您无法在 SecondViewControllerviewDidLoad 中获取预期的字符串值。

改用 strongcopy,它告诉属性 setter 将值的 retain count 增加 1,所以 SecondViewController owns (guessNumber owns) 字符串值,你可以在它的生命周期中一直获取它。

关于ios - 在 ViewController 之间推送数据不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49182506/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com