我有一个带2个视图控制器的导航控制器,A和B.
A和B都有属性
@property (strong, nonatomic) NSString *string;
字符串在控制器A中创建并传递给控制器B
ViewControllerB.string = self.string;
[self.navigationController pushViewController:ViewControllerB];
在View Controller B中,字符串被修改,当我弹出到View Controller A时,字符串的值没有改变。
由于它们都对它有强烈的引用,因此不应在两个View Controllers中更改字符串吗?
我错过了什么吗?
答案 0 :(得分:2)
在View Controller B中,字符串被修改
这是不可能的,因为您使用的是NSString
,而不是NSMutableString
。如果您在ViewControllerB
内替换它:
self.string = @"some other string";
然后,您要设置ViewControllerB
' string
属性以引用该新字符串,但对原始字符串的其他引用不会受到影响。
如果您确实希望两个视图控制器都修改相同的字符串,请使用NSMutableString
。但共享可变状态可能很糟糕。相反,请考虑使用中间类(如数据源)或ViewControllerB
的委托模式来交换ViewControllerA
更新后的字符串。