Xibを使って生成したTableViewのデリゲートメソッドが呼ばれない
現在Xib
でUIView
を一つ置き、そのUIView
の中にUITableView
を置いてます。
そしてコードは以下のように書きました。
@implementation CategoriesViewController
- (void)viewDidLoad {
[super viewDidLoad];
CategoriesView *categoriesView = [[CategoriesView alloc] initWithFrame:self.view.bounds];
[self.view addSubview:[categoriesView loadFromNib]];
}
@end
@implementation CategoriesView {
NSMutableArray *categoriesArray;
}
- (id)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
categoriesArray = [[NSMutableArray alloc] initWithObjects:@"食品", @"服", @"おもちゃ", @"家電", @"本", nil];
}
return self;
}
- (id)loadFromNib {
return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass([self class]) owner:nil options:nil] firstObject];
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [categoriesArray count];
}
-(UITableViewCell *)tableView: (UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
cell.textLabel.text = categoriesArray[indexPath.row];
return cell;
}
@end
以上を実行すると、中身のないテーブルビューが表示されます。
tableview.delegate
とtableview.dataSource
はStoryboard
で設定しており、それぞれUIView
を継承した「CategoriesView」に紐付けています。
試しにログを取ってみると、initWithFrameを通った時にはcategoriesArrayにきちんと全ての値が入っていたのですが、numberOfRowsInSectionの中を通る時にはcategoriesArrayはnilになっていました。これがいけないのだと思うのですが、なぜcategoriesArrayがnilになってしまうのでしょうか?Xib
でUITableView
を扱う時には何か他にしなければならないことがあるのでしょうか?
どなたか解決できる方がいれば教えていただきたいです。よろしくお願いします。