私はUISplitViewConrollerでUniversalアプリを持っています。私はストーリーボードを使用しています。iOS5 StoryBoardに代理人が設定されていませんUISplitViewController
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController;
UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0];
LeftViewContrller *lcontroller = (LeftViewContrller *)masterNavigationController.topViewController;
id<SplitViewDelegate> rightController = (id<SplitViewDelegate>)[splitViewController.viewControllers objectAtIndex:1];
lcontroller.delegate = rightController;
}
私はUISplitViewControllerアプリケーション用の左右のコントローラーを持っています。
LeftViewControllerには、RightViewControllerとして設定されたカスタムデリゲートがあります。
//Custom delegate
@protocol SplitViewDelegate <NSObject>
- (void) matchSelectionChanged:(NSString *)curSelection;
@end
//LeftViewContoller
@interface LeftViewContrller : UITableViewController {
id<SplitViewDelegate> _delegate;
NSMutableArray *_matches;
}
@property (strong) id<SplitViewDelegate> delegate;
@property (strong) NSMutableArray *matches;
@end
RightViewControllerは、この委任プロトコルを実装しています。しかし、LeftViewControllerでセルの内側の行をクリックすると、デリゲートは失敗します。
//RightViewController
@interface RightViewController : UIViewController <SplitViewDelegate>
@property (weak,nonatomic) IBOutlet UILabel *matchLabel;
@end
//Implementation of RightViewController
- (void) matchSelectionChanged:(NSString *)curSelection {
self.matchLabel.text = curSelection;
//[self refresh];
}
//Did select row in LeftViewController
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSMutableString *s = [[NSMutableString alloc] initWithString:@"Row selected"];
if (_delegate != nil) {
[s appendFormat:@" %d ", indexPath.row];
[_delegate matchSelectionChanged:s];
}
}
//エラー はCustomViewTab [1200:11303]取得* 'NSInvalidArgumentException'、理由によりキャッチされない例外にアプリを終了: - * を '[UINavigationController matchSelectionChanged::]認識されていないセレクタは、インスタンス0xda6a770に送られました'まずスローコールスタック: (0x1559052 0x1da8d0a 0x155aced 0x14bff00 0x14bfce2 0x1204e 0x62071d 0x620952 0x25986d 0x152d966 0x152d407 0x14907c0 0x148fdb4 0x148fccb 0x2500879 0x250093e 0x590a9b 0x1df8 0x1d55) は、私がdidSelを参照してください例外
を投げると呼ばTERMINATE ectRowAtIndexが呼び出されたがRightViewControllerのmatchSelectionChanged:(NSString *)curSelectionが呼び出されない。