0

我有一个关于我的故事板的问题。我想通过 segue 更改 ViewA 中的字符串的值。这意味着 ViewB 应该执行 segue 并为更改 ViewA 中字符串的值做准备。我现在的问题是,我的字符串的值保持不变。

查看A.h 文件:

@interface NewViewController : UITableViewController <MKAnnotation>
{
    NSString *longString;

}
@property (weak, nonatomic) NSString *longString;

ViewB.m 文件:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"transmitCoordsToNew"])
    {
        NewViewController *controller = (NewViewController *)segue.destinationViewController;
        controller.longString = [NSString stringWithFormat:@"%f", segueLong];    

    }
}

知道为什么变量保持不变或者为什么我在 ViewA 中看不到进一步操作的任何变化吗?

提前致谢,

菲尔

4

2 回答 2

2

我不确定你的变量 segueLong 来自哪里,但是对 longString 的弱引用很可能是导致问题的原因。将其更改为强参考,然后看看它是否有效。

于 2012-08-25T18:34:51.003 回答
0

如果在 prepareForSegue 中,您从我那里NewViewController *controller收到一个有效的(非零)值,[NSString stringWithFormat:@"%f", segueLong];我大约 90% 确信“弱”属性是导致该值变为零的原因。

这就是为什么!

[NSString stringWithFormat:@"%f", segueLong] 的范围受 prepareForSegue 方法的限制,它也没有所有者(也就是不计入引用)。即使 segueLong 有所有者并且不会被 arc 释放,从 stringWithFormat 生成的 NSString 也不会!

你需要做的就是变弱,变强。:

@interface NewViewController : UITableViewController <MKAnnotation>
{
    __strong NSString *longString;

}
@property (strong, nonatomic) NSString *longString;

这确保了由 NSString stringWithFormat 生成的字符串将属于你的 NewViewController!

于 2012-08-25T19:55:33.050 回答