如何在 WatchKit 中使用 "context" 传递多个对象
How to Pass multiple objects with "context" in WatchKit
我正在使用以下代码将数据传递到我的第三个控制器:
[self presentControllerWithName:@"ThirdView" context:MyArray];
问题是,我想传递的不仅仅是一个简单的数组。我想传递一个单独的字符串,如果可能的话再传递一个数组,我不想将字符串或另一个数组添加到 "MyArray".
是否有不同的方法来解决这个问题,或者我只是重构这段代码?
您可以使用要传递的数据创建自定义对象,也可以将数据捆绑在字典或数组中。在 swift 中,您也可以使用元组。
这是一个字典示例:
NSDictionary *myData = @{
@"MainArray" : MyArray,
@"MyString" : @"string",
@"AnotherArray" : anotherArray
};
[self presentControllerWithName:@"ThirdView" context: myData];
数组示例:
NSArray *myData = @[MyArray, @"string", anotherArray];
[self presentControllerWithName:@"ThirdView" context: myData];
虽然你可以使用字典或数组作为,但你没有类型安全,你必须确保键名/索引是两个地方都一样。
更好的方法是子类化 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];
然后在第三个view controller的awakeWithContext:方法中可以拉出数据:
- (void)awakeWithContext:(ThirdViewState *)state {
[super awakeWithContext:state];
// do whatever with state
}
我正在使用以下代码将数据传递到我的第三个控制器:
[self presentControllerWithName:@"ThirdView" context:MyArray];
问题是,我想传递的不仅仅是一个简单的数组。我想传递一个单独的字符串,如果可能的话再传递一个数组,我不想将字符串或另一个数组添加到 "MyArray".
是否有不同的方法来解决这个问题,或者我只是重构这段代码?
您可以使用要传递的数据创建自定义对象,也可以将数据捆绑在字典或数组中。在 swift 中,您也可以使用元组。
这是一个字典示例:
NSDictionary *myData = @{
@"MainArray" : MyArray,
@"MyString" : @"string",
@"AnotherArray" : anotherArray
};
[self presentControllerWithName:@"ThirdView" context: myData];
数组示例:
NSArray *myData = @[MyArray, @"string", anotherArray];
[self presentControllerWithName:@"ThirdView" context: myData];
虽然你可以使用字典或数组作为
更好的方法是子类化 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];
然后在第三个view controller的awakeWithContext:方法中可以拉出数据:
- (void)awakeWithContext:(ThirdViewState *)state {
[super awakeWithContext:state];
// do whatever with state
}