我正在使用以下代码将数据传递给我的第三个控制器:
[self presentControllerWithName:@"ThirdView" context:MyArray];
问题是,我想传递的不仅仅是一个简单的数组。我想传递一个单独的字符串,如果可能的话,另一个数组,我不想将字符串或其他数组添加到“MyArray”。
是否有不同的解决方法,或者我只重构此代码?
答案 0 :(得分:5)
您可以使用要传递的数据创建自定义对象,也可以将数据捆绑在字典或数组中。在swift中你也可以使用元组。
这是字典的例子:
NSDictionary *myData = @{
@"MainArray" : MyArray,
@"MyString" : @"string",
@"AnotherArray" : anotherArray
};
[self presentControllerWithName:@"ThirdView" context: myData];
数组示例:
NSArray *myData = @[MyArray, @"string", anotherArray];
[self presentControllerWithName:@"ThirdView" context: myData];
答案 1 :(得分:1)
虽然可以使用字典或数组作为Greg has suggested,但是没有类型安全性,您必须确保两个位置的键名/索引相同。
更好的方法是子类NSObject
并为要传输到该视图控制器的数据提供包装。
接口:
@interface ThirdViewState : NSObject
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSArray *list;
@end
简单的空实现:
@implementation ThirdViewState
@end
然后你可以构造这个对象的实例,用数据填充它并将它传递给视图控制器:
ThirdViewState *state = [[ThirdViewState alloc] init];
state.title = @"My 3rd view";
state.list = myArray;
[self presentControllerWithName:@"ThirdView" context:state];
然后在第三个视图控制器的awakeWithContext:方法中你可以提取数据:
- (void)awakeWithContext:(ThirdViewState *)state {
[super awakeWithContext:state];
// do whatever with state
}