Ios 在UITableViewController中调用重载数据不起作用

Ios 在UITableViewController中调用重载数据不起作用,ios,objective-c,uitableview,Ios,Objective C,Uitableview,当我的应用程序加载时,它使用UITableViewController构建一个菜单,该菜单分为两部分。第一部分有4个来自“硬编码”数组的项目,第二部分是从documents文件夹中所有文本文件的列表中动态生成的 当我的应用程序运行时,它会构建菜单,然后在需要时获取文件(菜单需要完整)。所以我菜单的第二部分是空白的。如果我再次运行该应用程序,菜单就可以了,因为文件现在已经存在 我想要的是,当文件下载完毕后,重新加载UITableViewController,从而重建菜单 文件的数量可以也将改变,并

当我的应用程序加载时,它使用
UITableViewController
构建一个菜单,该菜单分为两部分。第一部分有4个来自“硬编码”数组的项目,第二部分是从documents文件夹中所有文本文件的列表中动态生成的

当我的应用程序运行时,它会构建菜单,然后在需要时获取文件(菜单需要完整)。所以我菜单的第二部分是空白的。如果我再次运行该应用程序,菜单就可以了,因为文件现在已经存在

我想要的是,当文件下载完毕后,重新加载
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);
}
-(void)重新加载TableView{
NSLog(@“重新加载表视图已运行”);
[自建菜单];
[self.tableView重载数据];
}
-(void)buildmenuarray{
self.main菜单=[NSMutableArray阵列,其对象为:@“主页”@“参展商”@“扬声器”@“研讨会”,无];
NSArray*Path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,是);
NSString*docDirectory=[path objectAtIndex:0];
NSFileManager*fileManager=[[NSFileManager alloc]init];
NSArray*files=[fileManager内容目录路径:docDirectory错误:nil];
self.infoMenu=[[NSMutableArray alloc]init];
对于(int count=0;count
此时,数组已更新,并且存在正确的文件名,但
[self.tableView reloadData]似乎什么都不做

有什么想法吗

编辑


这似乎是一个简单的过程,但我看到许多其他人也有同样的问题。我采取的方法根本上是错误的吗?调用UITableViewController的reloadData方法似乎很容易,但不是吗?

您似乎在
ConnectiondFinishLoading
方法中创建了
MenuViewController
的新对象。这将为您提供一个新对象,但您在哪里将这个新TableViewController对象的视图添加到现有的ViewController中


您需要将这个新创建的TableViewController对象的视图添加到视图层次结构中。

您的tableView可能为零,您能否在
重新加载tableView
方法中设置一个断点并检查self.tableView的值?我已经按照您说的做了,self.tableView不是零,它显示了两个包含对象的数组属性。在添加它时,我确实考虑到了这一点,我正在创建UITableViewController的实例,可能没有重新加载“原始”对象-如果是,我如何重新加载“原始”对象或显示此“新”对象?为此,您需要创建原始MenuViewController对象的引用。让它成为一种财产。在viewDidLoad方法中分配内存,并在视图层次结构中添加MenuViewController的视图,只需使用reference.so in.h:{UITableView*tableView;}@property(非原子,强)UITableView*tableView调用ConnectionDifinishLoading方法中的reloadTableView方法;and.m:tableView=[[UITableView alloc]init]?您还应该添加
self.tableView.dataSource=self
self.tableView.delegate=self