我正在用故事板构建一个 iPad 应用程序。我有一个“数据页面”(视图),我在其中放置了一个带有包含数据的 tableview 的大容器。然后我上面有 3 个小容器,还有表格视图,它们应该过滤大容器上的数据。在 IB 中,使用嵌入 segues 连接了所有 tableview。从视觉上看,它已经完全按照我的需要构建,所有表格都显示了内容。到目前为止,一切都很好。
现在是通信部分:对于每个“过滤表视图”,我实现了一个协议方法和委托属性,并使“数据”容器表视图控制器符合它。但不知何故,这些方法没有被调用。我尝试在过滤器表视图控制器中设置 [self setDelegate:self],但这会使应用程序崩溃,并显示“:无法识别的选择器发送到实例”
这不是我的第一个委托协议,在我的其他(工作)案例中,我以编程方式实例化了一个视图,并且需要将委托设置为该视图。这里怎么弄???
下面的问题是:为了使我的数据容器视图控制器符合 3 个委托,我只设置了 3 个不同的类型 id 属性?(意思是,以不同的方式称呼它们?)
任何提示都非常感谢!
编辑:添加代码。[filter:selection:] 没有被调用...没有 NSLogs..
//MainDataViewController.h
@interface MainDataViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource,FilterDelegate>
-(void)filter:(Object *)filterObject selecting:(BOOL)selection;
@end
//MainDataViewController.m
#import "MainDataViewController.h"
#import "FilterViewController.h"
@interface MainDataViewController ()
@end
@implementation MainDataViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
- (void)filter:(Object *)filterObject selecting:(BOOL)selection;
{
NSLog(@"test");
NSLog(@"selection object: %@", filterObject);
}
@end
//FilterViewController.h
@protocol FilterDelegate <NSObject>
- (void)filter:(Object *)filterObject selecting:(BOOL)selection;
@end
@interface FilterViewController : UITableViewController <UITableViewDataSource, UITableViewDelegate>
@property (nonatomic, weak) id <FilterDelegate> delegate;
@end
//FilterViewController.m
#import "FilterViewController.h"
@interface FilterViewController ()
@end
@implementation FilterViewController
@synthesize delegate;
- (void)viewDidLoad
{
[super viewDidLoad];
[self setDelegate:self];
[self.tableView setDelegate:self];
[self.tableView setDataSource:self];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
}
[self.delegate filter:object selecting:YES];
}