Iphone UITableView刷新问题
每次导航包含此表的视图时,我都试图刷新Iphone UITableView刷新问题,iphone,objective-c,ios,uitableview,reloaddata,Iphone,Objective C,Ios,Uitableview,Reloaddata,每次导航包含此表的视图时,我都试图刷新UITableView 我有一个ViewController和一个自定义UITableViewController,它使用控制器中包含的NSMutableArray成功地在应用程序启动时正确设置表 当我导航到包含表的页面时,ViewController调用一个函数,该函数通过HTTP请求从服务器获取数据,并在NSMutableArray中解析数据 现在我的问题来了。我设法将此数组发送到我的UITableViewController,但当我想刷新我的table
UITableView
我有一个ViewController
和一个自定义UITableViewController
,它使用控制器中包含的NSMutableArray
成功地在应用程序启动时正确设置表
当我导航到包含表的页面时,ViewController
调用一个函数,该函数通过HTTP请求从服务器获取数据,并在NSMutableArray
中解析数据
现在我的问题来了。我设法将此数组发送到我的UITableViewController
,但当我想刷新我的tableView时,什么也没有发生
我尝试使用[myTable reloadData]
,但它不调用numberOfRowsInSection或cellForRowAtIndexPath
函数。我看到有相同问题的人使用[self.myTable ReloadData]
解决了这个问题,但我得到了一个错误:
访问未知的getter/setter方法
我对objective-C非常陌生,这个错误对我来说仍然有点神秘,因为我随机得到它
无论如何,我很可能弄乱了UITableViewController
(我应该在哪里声明它?)的声明和Interface Builder链接,因此这可能是找到解决方案的线索
有人有主意吗
多谢各位
编辑:这是我的tableview控制器类:
#import "MyCell.h"
@class Mycell;
@interface MyTableController : UITableViewController {
IBOutlet MyCell * myCell;
IBOutlet UITableView * myTable;
NSMutableArray *data;
}
@property (nonatomic, retain) IBOutlet UITableView * myTable;
- (void) EditTable : (NSMutableArray*) param;
@end
现在是.m:
@implementation MyTableController
@synthesize myTable;
- (void) viewDidLoad {
[super viewDidLoad];
myTable = [[UITableView alloc] init];
data = [[NSMutableArray alloc] init];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [data count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"MyCell";
MyCell *cell = (MyCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; >
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"MyCell" owner:self options:nil];
for (id currentObject in topLevelObjects){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (MyCell *) currentObject;
}
}
}
NSString *datastring = [listenom objectAtIndex:indexPath.row];
[cell setCell: datastring ];
return cell;
}
- (void) EditTable : (NSMutableArray*) param{
//This function is called by the ViewController when the user goes to the page containing the view
data = param; //The param array contains the data from the HTTP request
[self.tableView reloadData];
[self.myTable reloadData]; //I tried both, but only the first one actually calls the previous functions
}
在使用tableViewController时,您应该能够使用
self.tableView
来像这样重新加载数据
[self.tableView reloadData];
您需要先进行合成,然后才能使用self.myTable 在上面做什么
@synthesize myTable
然后
[self.myTable reloadData];
此代码示例中存在许多问题。我会在这里指出其中的一些,但我强烈建议阅读以下相关的苹果文档: 及 代码中的一些问题:
MyTableController
是UITableViewController的子类,因此不需要myTableView
的属性和属性。tableView
属性作为UITableViewController实现的一部分进行定义和初始化,其数据源和委托设置为UITableViewController实例。这就是[self.tableView reloadData]调用委托和数据源协议方法的原因viewDidLoad
中创建子视图,然后使用[view addSubview:mySubView]
将它们添加到视图中data
属性创建一个属性,并从初始化MyTableController
实例的视图控制器调用setData
。您可以使用setData:
方法来执行此操作。您可以在setData
中调用[self.tableView reloadData]
。加载视图时不需要显式重新加载表,因为这是自动完成的。更次要的一点是,如果您继续使用EditTable
,我会将其重命名为更具描述性,并使用驼峰大小写(例如setDataForTable`),以符合iOS惯例tableView:cellforrowatinexpath:
中引用的listenom
属性,不显示任何init/alloc。您是否打算改用数据
MyTableController.m
文件是否为完整版本?如果是这样,则缺少viewDidUnload
和dealloc
方法。两者都是必需的viewDidUnload
应释放viewDidLoad
中分配的任何对象,dealloc
应释放控制器保留的任何对象(包括viewDidUnload
中释放的对象)首先感谢您的回复。重新加载现在经过numberofsections和numberOfRowsInSection,但仍然从未调用cellForRowAtIndexPath。我检查了,NumberOfRowsInSections返回数组的大小。我更新了我的帖子,添加了一些代码以提供帮助,但我实际上认为问题在于我没有正确设置数据库。再次感谢您前进!欢迎使用SO!我已在您的帖子中修改了代码的格式,因此人们可以更轻松地使用它。将来,“>”可以突出显示一行代码,但要执行块,您需要选择它并点击“{}”按钮。谢谢!当我看到我自己的消息时,我有点尴尬,下次我一定会尝试更正确地编写代码。@Mathiew-不用担心。你应该看到我的第一篇文章!很可能是因为return[data count];returns 0…我添加了一个NSLog来检查[data count]的值,并返回我要在表中显示的数组的大小。如果我在ViewDidLoad函数的数组中添加了一些项,则在应用程序启动时调用CellForRowatineXpath,但在重新加载数据时不会调用,即使[data count]的值已更新。我是否忘记了将数组设置为表数据库?