0

ストーリーボードを使用して iPad アプリを作成しています。データを含むテーブルビューを備えた1つの大きなコンテナを配置する「データページ」(ビュー)があります。次に、上に3つの小さなコンテナがあり、テーブルビューもあり、大きなコンテナのデータをフィルタリングする必要があります。IB では、すべてのテーブルビューを埋め込みセグエで接続しました。視覚的には、必要に応じて、すべてのテーブルがコンテンツとともに表示されます。ここまでは順調ですね。

今度は通信部分です。「フィルター テーブルビュー」ごとに、プロトコル メソッドとデリゲート プロパティを実装し、「データ」コンテナー テーブルビュー コントローラーをそれに準拠させました。しかし、どういうわけかメソッドが呼び出されていません。フィルター テーブルビュー コントローラーで [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