我对我的故事板有疑问。我想通过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中进一步操作的任何变化?
提前致谢,
菲尔
答案 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!