AddClassViewController

AddClassViewController

我想我正在跟踪代表团的工作方式here's the tutorial I followed,但是我在某个地方搞砸了。我期待我的NSLog代理,但事实并非如此。谁能找出我想念的地方或做错了什么?

我的 MainViewController.h :

@interface MainViewController : UITableViewController < AddClassDelegate >

MainViewController.m :
- (void)cancelAddingClass {
    NSLog(@"Canceled Yo");
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

/*
 When a row is selected, the segue creates the detail view controller as the destination.
 Set the detail view controller's detail item to the item associated with the selected row.
 */
if ([[segue identifier] isEqualToString:@"addClassSegue"]) {

    UINavigationController *nc = (UINavigationController *)segue.destinationViewController;
    AddClassViewController *addClassVC = (AddClassViewController *)[nc.viewControllers objectAtIndex:0];
    addClassVC.delegate = self;
}

我的模态视图控制器 AddClassViewController.h :
@protocol AddClassDelegate <NSObject>
- (void)cancelAddingClass;
@end

@interface AddClassViewController : UITableViewController

@property (weak, nonatomic) id< AddClassDelegate > delegate;

- (IBAction)cancelButtonPressed:(id)sender;

AddClassViewController.m :
@synthesize delegate;

- (IBAction)cancelButtonPressed:(id)sender {
    [self.delegate cancelAddingClass];
}

cancelButtonPressed:

已连接到情节提要中模式视图的“取消”按钮。

最佳答案

您的代码看起来不错,这表明问题出在我们看不到的地方。我的猜测在这里:

AddClassViewController *addClassVC = [segue destinationViewController];
addClassVC.delegate = self;
NSLog(@"segued");

您是否已将模态视图控制器嵌入导航控制器中?如果是这样,destinationViewController将为您提供导航控制器,而不是AddClassViewController。检查addClassVC实际在调试器中是什么类。

如果它是导航控制器,那没问题,您只需要使用.viewControllers属性进入实际的VC。在几行内容上,使其更易于理解:
UINavigationController *nc = (UINavigationController *)segue.destinationViewController;
AddClassViewController *addClassVC = (AddClassViewController *)[nc.viewControllers objectAtIndex:0];
addClassVC.delegate = self;

您可以用较少的行数来完成此操作,但这是一团乱七八糟的铸造和嵌套括号,这很难调试。

关于iphone - 执行委派,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9618418/

10-14 21:03