繁体   English   中英

委托方法未执行

[英]Delegate method not executing

我真的很难弄清楚为什么我的一个委托方法可以完美执行,而另一个方法却不能。 这是不起作用的委托的相关代码:

SideBarController.h

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

@protocol ReportSelectViewControllerDelegate <NSObject>
@optional
    - (void) viewSelectMonitoredArea:(Report *)report;

@end

@interface SidebarController : UIViewController <UITableViewDataSource, UITableViewDelegate>

@property (nonatomic, weak) id <ReportSelectViewControllerDelegate> delegate;
@property (nonatomic, weak) IBOutlet UITableView *tableView;
@property (nonatomic, weak) Report *selectedReport;

@end

SideBarController.m

#import "SidebarController.h"

@interface SidebarController ()

@end

@implementation SidebarController

@synthesize tableView = _tableView;
@synthesize delegate;

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    NSMutableArray *sectionArray = [self.tableViewItems objectAtIndex:indexPath.section];
    NSDictionary* item = sectionArray[indexPath.row];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:item[@"title"] forKey:@"CurrentReportTitle"];

    self.selectedReport = [Report where:@{@"reportTitle": item[@"title"]}].lastObject;

    [self.delegate viewSelectMonitoredArea:self.selectedReport];

    [tableView deselectRowAtIndexPath:indexPath animated:YES];

}

DetailReportViewController.h

#import <UIKit/UIKit.h>
#import "BDBSplitViewController.h"
#import "SidebarController.h"

@interface DetailReportViewController : BDBDetailViewController <UISplitViewControllerDelegate, ReportSelectViewControllerDelegate >

@end

DetailReportViewController.m

#import "DetailReportViewController.h"

@interface DetailReportViewController ()

@end

@implementation DetailReportViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    SidebarController *sideBarController = [[SidebarController alloc] init];
    sideBarController.delegate = self;
}

- (void) viewSelectMonitoredArea:(Report *)report {

    NSLog(@"viewSelectMonitoredArea was called");
}

从另一个控制器到DetailReportViewController的编写方式完全相同的另一个委托也可以正常工作。 当我在调用委托之后立即放置一个断点时,我注意到该委托具有一个nil值。 任何帮助将不胜感激。 编辑:对不起,我忘了在DetailReportViewController.h示例中放入sideBarController.delegate = self 它在原始代码中。

DetailReportViewController类需要获取对“ SideBarController”实例的引用,然后将其自身设置为委托。 在DetailReportViewController中:

// This needs to be in the DetailReportViewController class
// Assume we have a reference to the SideBarController in the DetailReportViewController class called sideBarControllerInstance
sideBarControllerInstance.delegate = self;

迈克尔·道特曼(Michael Dautermann)提出的解决方案是

DetailReportViewController *detailReport = [[DetailReportViewController alloc] init];
    self.delegate = detailReport;

就在之前

[self.delegate createSelectMonitoredArea:self.selectedReport];

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM