0

我正在用故事板构建一个 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];
}
4

2 回答 2

0

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

[self.filter1TableView setDelegate:self];
[self.filter2TableView setDelegate:self];
[self.filter3TableView setDelegate:self]; 
于 2013-05-15T14:19:00.287 回答
0

我最终删除了 containerViews 并呈现了弹出框。委托协议按预期工作。很好奇我做错了什么..我猜它与嵌入视图的父视图有关..?

于 2013-05-23T09:45:35.690 回答