リポジトリからデータを取得して NSArray に詰め込むクラスがあります。
EpisodeRepository クラス
-(NSMutableArray *)getEpisodes {
NSMutableArray *episodes = [NSMutableArray array];
NSData *data = [self getDataFromAction:kGetEpisodesAction];
NSError *error = nil;
NSArray *json = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:&error];
for (NSDictionary *d in json) {
Episode *episode = [self buildEpisodeFromJSONDictionary:d];
[episodes addObject:episode];
}
return episodes;
}
私のView Controllerでは、レポとエピソードの配列への参照を次のように保持しています。
@interface VideoController : UITableViewController
@property (nonatomic, strong) NSArray *episodes;
@property (nonatomic, strong) EpisodeRepository *episodeRepo;
実装では、ビューが表示されるたびに、Web サービス (EpisodeRepository 内) からデータを再フェッチし、更新されたエピソードでテーブル ビューをリロードします。これは、テーブルビューが初めて作成されたときにうまく機能します。問題は、cellForRowAtIndexPath を呼び出すと、エピソード配列が完全に空白になることです。null ではありませんが、データはまったくありません。奇妙なことに、他のすべての tableView デリゲートは配列にデータがあることを認識し、それに応じて動作します。cellForRowAtIndexPath の何が特別で、配列内のエントリが削除される可能性があるのはなぜですか?
コントローラーの実装は次のとおりです。
-(id) initWithCoder:(NSCoder *)aDecoder {
self = [super initWithCoder:aDecoder];
if(self) {
episodeRepo = [[EpisodeRepository alloc] init];
}
return self;
}
-(void)viewWillAppear:(BOOL)animated
{
[self loadContent];
[self.tableView reloadData];
[super viewWillAppear:animated];
}
-(void) loadContent {
self.episodes = [self.episodeRepo getEpisodes];
self.seasons = [self getSeasons:self.episodes];
[self setUILoaded];
}
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//episodes is an empty array here???
}