現在XibUIViewを一つ置き、その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.delegatetableview.dataSourceStoryboardで設定しており、それぞれUIViewを継承した「CategoriesView」に紐付けています。
試しにログを取ってみると、initWithFrameを通った時にはcategoriesArrayにきちんと全ての値が入っていたのですが、numberOfRowsInSectionの中を通る時にはcategoriesArrayはnilになっていました。これがいけないのだと思うのですが、なぜcategoriesArrayがnilになってしまうのでしょうか?XibUITableViewを扱う時には何か他にしなければならないことがあるのでしょうか?
どなたか解決できる方がいれば教えていただきたいです。よろしくお願いします。