我正在尝试使用委托将值从一个 VC 传递到另一个。我想我误解了它应该工作的方式。
在我的主要 ViewController.h 我有这个:
@protocol defaultLocationChoice <NSObject>
- (NSString *) locChoice;
@end
在我的 PreferencesViewController.h 和 ChooseServerViewController.h 中,我已经defaultLocationChoice
在 @interface 部分声明了属性,如下所示:
@property (nonatomic, assign) id <defaultLocationChoice> locationDelegate;
两者也是合成的。
当用户从 PreferencesViewController 转到 ChooseServerViewController 时,准备 segue 的代码是:
- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"toServerChoice"]) {
ChooseServerViewController *viewController = (ChooseServerViewController *)segue.destinationViewController;
viewController.locationDelegate = self;
}
}
在 ChooseServerViewController 中选择单元格时,我调用:
[self locChoice];
这是:
- (NSString *) locChoice {
NSLog(@"Cell Vale Loc choice %@",cellValue);
return cellValue;
}
NSLog 验证返回的值是否正确。
现在,我想我明白了,委托中 LocChoice 的值现在是返回的值,不是吗?
当用户返回(NavController)时,PreferencesViewController 具有:
-(void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
defaultLocation = [locationDelegate locChoice];
[self.tableView reloadData];
}
我期待 defaultLocation 的值现在等于传递给 locChoice 的值。但是,当表格重新加载时,有问题的单元格仍然是空白的,这意味着我期望发生的事情没有发生。
有任何想法吗?