gpt4 book ai didi

objective-c - 无法在prepareForSegue中设置属性:sender:

转载 作者:行者123 更新时间:2023-11-29 04:46:57 25 4
gpt4 key购买 nike

下面的解决方案 - 并不是我想象的那样。

我正在使用prepareForSegue:sender:将数据添加到正在插入的 View Controller 中,但我的问题是,如果使用属性设置数据,则该属性不会更改。但是,我可以使用目标 View Controller 的私有(private)变量,并使用为此目的构建的函数进行设置。

这是有效的代码:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([[segue identifier] isEqualToString:@"showLocationDetail"]) {
CityGuideFlipsideViewController *flipside = [segue destinationViewController];
CityGuideAnnotation *senderAnnotation = (CityGuideAnnotation *)sender;
[flipside annotate:senderAnnotation]; // why?
}
}

不过,使用 flipside.annotate = senderAnnotation 似乎比使用 [flipside annotate:senderAnnotation] 更自然。

当然,我一定在这里做了一些明显的事情,但我看不到它。

编辑以更清楚地给出失败案例:

// CityGuideFlipsideViewController.h
@interface CityGuideFlipsideViewController : UIViewController {
CityGuideAnnotation *annotation;
}
@property (strong, nonatomic) CityGuideAnnotation *annotation;

// CityGuideFlipsideViewController.m
@synthesize annotation;
- (void)setAnnotation:(CityGuideAnnotation *)_annotation
{
annotation = _annotation;
}

// CityGuideMainViewController.m (in prepareForSegue:sender)
CityGuideFlipsideViewController *flipside = [segue destinationViewController];
CityGuideAnnotation *senderAnnotation = (CityGuideAnnotation *)sender;
flipside.annotation = senderAnnotation;

到达将 Flipside.annotation 指定为 senderAnnotation 的行时,senderAnnotation 的值是正确的。赋值前的 Flipside.annotation 为 nil。在该行之后,senderAnnotation 未更改,flipside.annotation 也未更改。

但是,到达 CityGuideFlipsideViewController viewDidLoad 我有 NSLog(@"%@",annotation.title) 它会输出正确的值,即使调试器仍然显示 nil 注释。

所以我真的不确定我之前是否犯过一些小错误,是否一直被调试器中的注释 CityGuideAnnotation * 0x00000000 愚弄。

对此深表歉意,并感谢那些提供帮助的人。

最佳答案

如果注释是目标 VC 上的私有(private)属性,则发送者 VC 无法访问它(除了您设置的 annotate: 方法)。 prepareForSegue 不提供对目标 VC 的任何特殊访问权限,在本例中是私有(private)属性(property)。如果您想使用点表示法,则需要将注释公开为公共(public) API 的一部分。

我希望我正确理解了你的问题:-)

祝你好运

达米安

关于objective-c - 无法在prepareForSegue中设置属性:sender:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9493775/

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