Objective c 目标C:使用委托调用父类中的函数

Objective c 目标C:使用委托调用父类中的函数,objective-c,methods,delegation,Objective C,Methods,Delegation,我正在创建一个三层导航弹出控制器,在第三个弹出控制器上,我有一个委托方法来访问父类中的dismissPopup方法。我似乎无法调用它,父类中的函数中的NSLog消息甚至没有显示,因此我一定是使用了错误的委托,或者调用了错误的委托 3类ParentViewController有一个工具栏,工具栏上有一个按钮,用于打开表视图-->区域ViewController是第一个带有项目-->ConusViewController的表视图控制器,是推送到导航堆栈上的第二个表视图控制器。我试图在点击选择后调用父

我正在创建一个三层导航弹出控制器,在第三个弹出控制器上,我有一个委托方法来访问父类中的dismissPopup方法。我似乎无法调用它,父类中的函数中的NSLog消息甚至没有显示,因此我一定是使用了错误的委托,或者调用了错误的委托

3类ParentViewController有一个工具栏,工具栏上有一个按钮,用于打开表视图-->区域ViewController是第一个带有项目-->ConusViewController的表视图控制器,是推送到导航堆栈上的第二个表视图控制器。我试图在点击选择后调用父方法中的dismissPopover方法,该方法带有一个委托,这样整个popover就会消失

在ConusViewController中,如果委托有效,我会看到从父类中的函数访问“方法”。它没有显示,所以我一定是用错了授权

很抱歉在我的帖子上这么罗嗦,我想完整地说明我在这里要做的事情。谢谢

ParentViewController.h

RegionViewController.m

ConusViewController.h


不确定是否错过了,但我从未看到您在ConusViewController中设置委托属性。需要设置为要委托给的对象的实例(其中实现了dismissPopover的对象)。

在调用
[delegate dismissPopover]
之前,检查是否实际设置了
委托。可能不是

我在ParentViewController.m中看到,您创建了ConusViewController的一个实例并设置了它的委托,但从未显示它。在RegionViewController.m中,您可以创建ConusViewController的另一个实例,而不设置其委托,该实例似乎正在显示

#import <UIKit/UIKit.h>
#import "ConusViewController.h"

@interface EnscoWXViewController : UIViewController <ConusViewControllerDelegate> {
    UIPopoverController *popoverController;
    IBOutlet UIWebView *webImageDisplay;
    ConusViewController *cViewController;
}
@property (nonatomic, retain) UIPopoverController *popoverController;
@property (nonatomic, retain) UIWebView *webImageDisplay;

@property (nonatomic, retain) ConusViewController *cViewController;

-(IBAction) buttonShowRegion:(id) sender;
@end
#import "ParentViewController.h"
#import "RegionViewController.h"

@implementation ParentViewController
@synthesize cViewController;

-(IBAction) buttonShowRegion:(id) sender {
...
}

-(void)dismissPopover {
    [popoverController dismissPopoverAnimated:YES];
    printf("Method Accessed\n");
}

- (void)viewDidLoad {
    cViewController = [[ConusViewController alloc] init];
    cViewController.delegate = self;
    [super viewDidLoad];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    switch (indexPath.row) {
        case 0: { 
            ConusViewController *conusViewController = [[ConusViewController alloc] initWithNibName:@"ConusViewController" bundle:nil];
            conusViewController.contentSizeForViewInPopover = CGSizeMake(320, 350);
            [self.navigationController pushViewController:conusViewController animated:YES];
            [conusViewController release];
            break;
        }
        case 1: {
            break;
        }
    }
}
#import <UIKit/UIKit.h>

@protocol ConusViewControllerDelegate <NSObject>
@required
- (void)dismissPopover;
@end

@interface ConusViewController : UITableViewController {
    NSMutableArray *conusItems;
    id delegate;
}
@property (nonatomic, assign) id <ConusViewControllerDelegate> delegate ;
@end
#import "ConusViewController.h"
#import "ParentWXViewController.h"

@implementation ConusViewController
@synthesize delegate;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *itemRequested = [conusItems objectAtIndex:indexPath.row];
    NSLog(@"logging: %@", itemRequested);
    [delegate dismissPopover];
    [itemRequested release];
}