如何在WatchKit中使用“context”传递多个对象

时间:2015-07-13 08:11:26

标签: ios objective-c watchkit

我正在使用以下代码将数据传递给我的第三个控制器:

[self presentControllerWithName:@"ThirdView" context:MyArray];

问题是,我想传递的不仅仅是一个简单的数组。我想传递一个单独的字符串,如果可能的话,另一个数组,我不想将字符串或其他数组添加到“MyArray”。

是否有不同的解决方法,或者我只重构此代码?

2 个答案:

答案 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
}