2012-04-04 9 views
4

Iを以下に示すCustomer.hファイル内のプロトコルを定義している渡す値は、

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    Customer *selectedCustomer = [customers objectAtIndex:[indexPath row]]; 
    [self.delegate didSelectCustomer:selectedCustomer]; 
} 

ここで、DetailViewController(右側)に何かをさせる必要があります。 DetailViewControllerは、CustomerDelegateプロトコルに準拠しています。

@interface DetailViewController : UIViewController<UISplitViewControllerDelegate,CustomerDelegate> 
{ 

} 

-(void) didSelectCustomer:(Customer *)customer 
{ 
    NSLog(@"sssdasdasdasd"); 
} 

didSelectCustomerメソッドは呼び出されません。私はmasterViewController.delegate = selfを設定する必要があると思うが、私はこのことをどこに設定するか分からない。

UPDATE 1:私はDetailViewController内部MasterViewControllerのインスタンスを追加しましたが、それはうまくいきませんでした

- (void)viewDidLoad 
{ 
    [super viewDidLoad];  

    MasterViewController *master = [[MasterViewController alloc] init]; 
    master.delegate = self; 
} 

SOLUTION:AppDelegateで

else 
    { 
     UISplitViewController *splitViewController = (UISplitViewController *) self.window.rootViewController; 
     splitViewController.delegate = [splitViewController.viewControllers lastObject]; 



     UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 
     // splitViewController.delegate = (id)navigationController.topViewController; 




     DetailViewController *detail =(DetailViewController *) [splitViewController.viewControllers lastObject]; 

     UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; 

     MasterViewController *master = (MasterViewController *)masterNavigationController.topViewController; 

     master.delegate = detail; 
    } 
+0

問題を修正しましたか?これは私の脳を食べる。修正プログラムが見つかった場合はお知らせください。 – GenieWanted

答えて

0

あなたはConsumerクラスのデリゲートとして明示的に宣言することはありません。単にそれに従うだけでそれをカットしません。おそらくこのように、消費者のインスタンスを作成することにより、-viewDidLoadでそれを宣言します。

-(void)viewDidLoad { 
    Consumer *consumer = [[Consumer alloc]init]; 
    [consumer setDelegate:self]; 
} 

また、消費者の中に、デリゲートオブジェクトのプロパティを宣言していないので、実際にアクセスすることはできません。この最初の操作を行います。

@class Customer; 
@protocol CustomerDelegate <NSObject> 

-(void) didSelectCustomer:(Customer *) customer; 

@end 

@interface Customer : NSObject 
{ 

} 

@property (nonatomic,copy) NSString *name; 
@property (nonatomic,copy) NSString *occupation; 
@property (weak) id <CustomerDelegate> delegate; //use assign or __unsafe_unretained if targeting <5.0. 

@end 

クラスがそうのようなあなたのプロトコルに準拠している場合あなたがチェックできます。

if (![delegate conformsToProtocol:@protocol(CustomerDelegate)]) { 
    [NSException raise:@"Delegate Exception" 
       format:@"Parameter does not conform to CustomerDelegate protocol at line %d", (int)__LINE__]; 
} 
+0

しかしdidSelectRowAtIndexPathメソッドの中からdidSelectCustomerデリゲートを呼び出すにはどうすればいいですか? – azamsharp

+0

これは正しく行っています。デリゲートを割り当てたことはありませんので、うまくいかないでしょう。 – CodaFi

+0

代理人がMasterViewControllerファイルにあります。だからDetailViewControllerからは何か_masterViewController.delegate = self;しかし、それは動作していません。 – azamsharp

0

分割ビューコントローラの最後のオブジェクト。

このオブジェクトはUIナビゲーションコントローラを返します。

あなたが知っている、あなた自身をすることができます。