2012-01-07 2 views
0

Я установил метод делегата для связи с моего masterViewController на мой detailViewController, но метод делегата не вызван.Делегат в UISplitView не называется

MasterViewController.h

#import <UIKit/UIKit.h> 

@class DetailViewController; 
@class MasterViewController; 

@protocol MasterViewControllerDelegate 
- (void)SelectionChanged:(NSString *)url; 
@end 

@interface MasterViewController : UITableViewController 

@property (nonatomic, weak) id<MasterViewControllerDelegate> delegate; 
@property (strong, nonatomic) DetailViewController *detailViewController; 

@end 

Тогда в моей MasterViewController.m я синтезирование делегата:

@synthesize delegate; 

И, наконец, я звоню метод делегата от моего метода didSelectRowAtIndexPath вот так:

Тогда в моем DetailViewController.h У меня есть:

@interface DetailViewController : UIViewController <UISplitViewControllerDelegate, MasterViewControllerDelegate> 

И в DetailViewController.m:

- (void)SelectionChanged:(NSString *)url { 
    NSLog(@"URL is %@", url); 
} 

Когда я запустить приложение, то NSLog из SelectionChanged никогда не вызывается, и я не получаю никаких ошибок. Есть идеи?

+0

Вы уверены, что 'self.delegate' не ноль? – Saphrosit

+0

Я только что проверил его и, конечно, self.delegate (null). Я думаю, я должен понять, почему это так ... –

+1

Не может показаться, что мой делегат имеет значение null .... тьфу. –

ответ

1

Хорошо, я понял это ... В моем файле AppDelegate.m я добавил следующее didFinishLaunchingWithOptions

DetailViewController *detail = (DetailViewController *)navigationController.topViewController; 
UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; 
MasterViewController *master = (MasterViewController *)masterNavigationController.topViewController; 

NSLog(@"%@",masterNavigationController.topViewController); 
master.delegate = detail; 

Таким образом, весь метод выглядит следующим образом:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Override point for customization after application launch. 
    UISplitViewController *splitViewController = (UISplitViewController *)self.window.rootViewController; 
    UINavigationController *navigationController = [splitViewController.viewControllers lastObject]; 
    splitViewController.delegate = (id)navigationController.topViewController; 

    DetailViewController *detail = (DetailViewController *)navigationController.topViewController; 
    UINavigationController *masterNavigationController = [splitViewController.viewControllers objectAtIndex:0]; 
    MasterViewController *master = (MasterViewController *)masterNavigationController.topViewController; 

    NSLog(@"%@",masterNavigationController.topViewController); 
    master.delegate = detail; 

    return YES; 
} 

В основном проблема что я нигде не назначал делегата .... duh.