2014-02-05 68 views
1

當我的應用程序加載了它使用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方法應該很容易做到,但不是嗎?

+0

您的tableView可能是零,你可以設置一個斷點'reloadTableView'方法中,檢查self.tableView的價值? – bsarr007

+0

我按照你所說的完成了,self.tableView不是零,它顯示了兩個數組屬性中有對象。 – Ryan

回答

0

你似乎connectionDidFinishLoading方法來製作的MenuViewController一個新的對象。這會給你一個新的對象,但是你在哪裏添加了這個新的TableViewController對象的視圖到現有的ViewController中?

您需要將此新創建的TableViewController對象的視圖添加到您的視圖層次結構中。

+0

我確實在想,因爲我正在添加它,我正在創建UITableViewController的一個實例,並且可能不會重新加載「原始」 - 如果是這樣,我該如何重新加載「原始」或顯示此「新」對象? – Ryan

+0

爲此,您需要創建原始MenuViewController對象的引用。使它成爲一個財產。在viewDidLoad方法中分配內存,並在視圖層次結構中添加MenuViewController的視圖,並使用參考在connectionDidFinishLoading方法中調用reloadTableView方法。 –

+0

所以在.h:{UllSableView * tableView; } @property(nonatomic,strong)UITableView * tableView; – Ryan

相關問題