當我的應用程序加載了它使用UITableViewController
建立一個菜單,此菜單分爲兩個部分。第一部分包含來自'硬編碼'數組的4個項目,第二部分是從文檔文件夾中的所有文本文件列表動態製作的。中的UITableViewController調用reloadData沒有工作
當我的應用程序運行時,它構建菜單,然後,如果在需要他們(該菜單需要完成)獲取文件。所以我的菜單的第二部分是空白的。如果我再次運行該應用程序,菜單現在存在的文件是好的。
我要的是,當文件下載完成後,爲UITableViewController
重新加載,因此菜單重修。
文件的數量能夠而且將會改變,將與進行文件下載之前一個時間戳檢查更新的頻率。
當文件被下載:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
MenuViewController *refreshedMenu = [[MenuViewController alloc]init];
[refreshedMenu reloadTableView];
// Have also tried:
// [refreshedMenu performSelectorOnMainThread:@selector(reloadTableView)withObject:nil waitUntilDone:NO ];
[file closeFile];
}
的UITableViewController
的代碼:
-(void)reloadTableView{
NSLog(@"reloadTableView has been run");
[self buildMenuArrays];
[self.tableView reloadData];
}
-(void)buildMenuArrays{
self.mainMenu = [NSMutableArray arrayWithObjects:@"Home", @"Exhibitor", @"Speaker", @"Workshop", nil];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *docDirectory = [paths objectAtIndex:0];
NSFileManager *fileManager = [[NSFileManager alloc] init];
NSArray *files = [fileManager contentsOfDirectoryAtPath:docDirectory error:nil];
self.infoMenu = [[NSMutableArray alloc] init];
for (int count = 0; count < files.count; count++) {
NSString *currentFile = [files objectAtIndex:count];
if ([currentFile rangeOfString:@".txt"].location == NSNotFound) {
NSLog(@"File %@ does not contain .txt", currentFile);
} else {
NSLog(@"File %@ DOES contain .txt", currentFile);
[self.infoMenu addObject:[files objectAtIndex:count]];
}
}
NSLog(@"File array = %@", self.infoMenu);
}
目前,該陣列被更新和正確的文件名是有,但[self.tableView reloadData];
似乎做沒有。
任何想法?
編輯
這似乎是這樣一個簡單的過程,但我看到很多其他人也有同樣的問題。我採取的方法從根本上錯誤?這似乎是調用UITableViewController的reloadData方法應該很容易做到,但不是嗎?
您的tableView可能是零,你可以設置一個斷點'reloadTableView'方法中,檢查self.tableView的價值? – bsarr007
我按照你所說的完成了,self.tableView不是零,它顯示了兩個數組屬性中有對象。 – Ryan