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代码>。