IOS 视图控制器之间的数据
IOS Data Between View Controllers
我有一个带有 2 个视图控制器 A 和 B 的导航控制器。
A和B都有一个属性
@property (strong, nonatomic) NSString *string;
字符串在控制器 A 中创建并传递给控制器 B
ViewControllerB.string = self.string;
[self.navigationController pushViewController:ViewControllerB];
在视图控制器 B 中,字符串被修改,当我弹出到视图控制器 A 时,字符串的值没有改变。
既然它们都持有对它的强引用,难道不应该在两个视图控制器中更改字符串吗?
我是不是漏掉了什么?
In View Controller B, string is modified
这是不可能的,因为您使用的是 NSString
,而不是 NSMutableString
。如果在 ViewControllerB
:
内替换它
self.string = @"some other string";
然后您将 ViewControllerB
的 string
属性 设置为引用该新字符串,但对原始字符串的其他引用不受影响。
如果你真的想让两个视图控制器修改同一个字符串,使用NSMutableString
。但是共享可变状态可能不好。相反,考虑使用中介 class(如数据源)或 ViewControllerB
的委托模式来传递 ViewControllerA
更新的字符串。
我有一个带有 2 个视图控制器 A 和 B 的导航控制器。
A和B都有一个属性
@property (strong, nonatomic) NSString *string;
字符串在控制器 A 中创建并传递给控制器 B
ViewControllerB.string = self.string;
[self.navigationController pushViewController:ViewControllerB];
在视图控制器 B 中,字符串被修改,当我弹出到视图控制器 A 时,字符串的值没有改变。
既然它们都持有对它的强引用,难道不应该在两个视图控制器中更改字符串吗?
我是不是漏掉了什么?
In View Controller B, string is modified
这是不可能的,因为您使用的是 NSString
,而不是 NSMutableString
。如果在 ViewControllerB
:
self.string = @"some other string";
然后您将 ViewControllerB
的 string
属性 设置为引用该新字符串,但对原始字符串的其他引用不受影响。
如果你真的想让两个视图控制器修改同一个字符串,使用NSMutableString
。但是共享可变状态可能不好。相反,考虑使用中介 class(如数据源)或 ViewControllerB
的委托模式来传递 ViewControllerA
更新的字符串。