ある VC から別の VC に値を渡すためにデリゲートを使用しようとしています。私はそれが機能するはずの方法を誤解していると思います。
メインの ViewController.h には次のものがあります。
@protocol defaultLocationChoice <NSObject>
- (NSString *) locChoice;
@end
私のPreferencesViewController.hとChooseServerViewController.hの両方で、@interfacedefaultLocationChoice
セクションで宣言し、プロパティを次のように割り当てました。
@property (nonatomic, assign) id <defaultLocationChoice> locationDelegate;
どちらも合成されています。
ユーザーが PreferencesViewController から ChooseServerViewController にセグエする場合、セグエ コードの準備は次のとおりです。
- (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 に渡された値と等しくなると予想していました。ただし、テーブルがリロードされると、問題のセルはまだ空白であり、私が期待していることは起こっていません。
何か案は?