容器之间的通信,委托协议不起作用?

时间:2013-05-15 13:22:15

标签: ios delegates protocols containers uistoryboard

我正在构建一个带有故事板的iPad应用程序。我有一个“数据页面”(视图),我在其中放置了一个包含数据的tableview的大容器。然后我上面有3个小容器,也有tableviews,那些应该过滤大容器上的数据。在IB中连接所有带有嵌入segues的tableviews。在视觉上,它已经构建了我需要的内容,所有表格都显示内容。到目前为止一切顺利。

现在的通信部分:对于每个“过滤器tableview”,我实现了一个协议方法和委托属性,并将“数据”容器tableview控制器符合它。但不知怎的,方法没有被调用。我尝试在过滤器tableview控制器中设置[self setDelegate:self],但是使用“:unrecognized selector sent to instance”崩溃应用程序

这不是我的第一个委托协议,在我的其他(工作)情况下,我以编程方式实例化视图,并需要将委托设置为该视图。怎么在这里完成???

以下问题是:为了使我的数据容器视图控制器符合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];
}

2 个答案:

答案 0 :(得分:0)

[self setDelegate:self]看起来不正确。我认为它看起来应该更像:

[self.filter1TableView setDelegate:self];
[self.filter2TableView setDelegate:self];
[self.filter3TableView setDelegate:self]; 

答案 1 :(得分:0)

我最终删除了containerViews并展示了popovers。委托协议按预期工作。非常好奇我做错了什么..我猜它与嵌入式视图的parentView有关...?