通过ios 5上的segues访问字符串

时间:2012-08-25 18:31:01

标签: ios xcode string storyboard segue

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

ViewA.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中进一步操作的任何变化?

提前致谢,

菲尔

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

如果在prepareForSegue中,您NewViewController *controller正在收到来自[NSString stringWithFormat:@"%f", segueLong];的有效(非零)值,那么我大约90%肯定“{1}}弱”&{39} property属性负责将值转为nil。

这就是为什么!

[NSString stringWithFormat:@&#34;%f&#34;,segueLong]的范围受prepareForSegue方法的限制,也没有所有者(也没有计算引用)。即使segueLong拥有一个所有者并且不会被arc释放,stringWithFormat产生的NSString也不会!

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

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

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

这可确保NSString stringWithFormat生成的字符串属于NewViewController!