2012-11-14 50 views
0

後,我有一個類,它從資源庫中獲取數據和它填充到一個NSArray:NSArray的空調用reloadData

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; 

} 

在我的視圖控制器中,我保留對回購和劇集數組的引用,如下所示:

@interface VideoController : UITableViewController 

@property (nonatomic, strong) NSArray *episodes; 
@property (nonatomic, strong) EpisodeRepository *episodeRepo; 

在實現中,我想要發生的是每個視圖都會出現,從Web服務(位於EpisodeRepository中)中重新獲取數據,並使用更新後的劇集重新加載表視圖。這在第一次填充tableview時效果很好。問題是,當我調用cellForRowAtIndexPath時,劇集數組完全是空白的。它不是空的,但是沒有任何數據。奇怪的是,所有其他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??? 
} 
+0

發佈getDataFromAction實現。是異步的? – LombaX

回答

0

我找到了解決辦法!事實證明,我的代碼是在我的App Delegate下的willSelectViewController下的,用於在視圖控制器之外分配數組的標籤欄。獲得的經驗:不要這樣做!

相關問題