XCode 4.3.2のマスター/詳細アプリケーションテンプレート(ARC、ストーリーボードを使用)で、マスターテーブルビューのアイテムが選択されたときに詳細ビューを変更(より具体的には置換)しようとしています。このためにデリゲート/プロトコルを実装しようとしています。
私が混乱しているのは、プロトコルで定義されたメソッドを実装するクラスはマスターか詳細かということです。
詳細ビューにプロトコルメソッドを実装させることは私にとって理にかなっています。なぜなら、選択に基づいて(プロトコルメソッドを介してマスターから文字列として渡される)詳細ビューでビューコントローラーをプッシュ/ポップするからです。
これが私が試したことです
1)MasterViewController.hでプロトコルを定義しました
@protocol MasterViewDelegate <NSObject>
- (void)masterSelectionChanged:(NSString *)selection;
@end
@interface MasterViewController:UIViewContoller
@property (nonatomic, weak) id <MasterViewDelegate> delegate
2)MasterViewController.mで
@synthesize delegate;
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[delegate masterSelectionChanged:@"Some string based on indexPath.row"];
}
3)DetailViewController.h内
#import "MasterViewController.m"
@interface DetailViewController:UINavigationController <MasterViewDelegate>
@end
4)DetailViewController.mで
#pragma mark - MasterViewDelegate
- (void)masterSelectionChanged:(NSString *)selection
{
NSLog(@"the selection is: %s", selection);
// WIll push/pop view over here, may be perform segues based on selection
}
このプロセスでは、マスターテーブルの行を選択しても何も起こりませんでした。クラッシュもログの表示も、ビルド中のエラーもありません。ここで何が恋しかったですか?