gpt4 book ai didi

iphone - UITableView刷新问题

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:26:53 25 4
gpt4 key购买 nike

每次浏览包含此表的 View 时,我都试图刷新 UITableView

我有一个 ViewController 和一个自定义的 UITableViewController,它们在应用程序启动时使用 NSMutableArray 包含在 Controller 。

当我导航到包含该表的页面时,ViewController 调用一个函数,该函数使用 HTTP 请求从服务器获取数据并将其解析到 NSMutableArray 中。

现在我的问题来了。我设法将这个数组发送到我的 UITableViewController,但是当我想刷新我的 tableView 时,没有任何反应。

我尝试使用 [myTable reloadData],但它没有调用 numberOfRowsInSection 或 cellForRowAtIndexPath 函数。我看到有同样问题的人使用 [self.myTable ReloadData] 解决了它,但我得到一个错误:

accessing unknown getter/setter method

我是 Objective-C 的新手,这个错误对我来说还是有点神秘,因为我是随机得到的。

无论如何,我很可能把 UITableViewController 的声明(我应该在哪里声明它?)和 Interface Builder 链接搞得一团糟,所以这可能是一个找到解决方案的线索。

有人有想法吗?

非常感谢!

编辑:这是我的 tableview Controller 类:

#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

}

最佳答案

您在此代码示例中遇到了很多问题。我会在这里指出其中的一些,但我强烈建议阅读相关的 Apple 文档:

http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/Introduction/Introduction.html

http://developer.apple.com/library/ios/#documentation/userexperience/conceptual/TableView_iPhone/AboutTableViewsiPhone/AboutTableViewsiPhone.html

您的代码中的一些问题:

  1. 由于 MyTableController 类是 UITableViewController 的子类,因此您不需要 myTableView 的特性和属性。 tableView 属性被定义和初始化为 UITableViewController 实现的一部分,其数据源和委托(delegate)设置为 UITableViewController 实例。这就是 [self.tableView reloadData] 调用您的委托(delegate)和数据源协议(protocol)方法的原因。

  2. 您还使用了界面生成器,因此如果您确实想创建自己的 subview ,您应该在 IB 中创建并在那里设置 socket ,或者在您的代码中创建 subview ,这意味着在 viewDidLoad,然后使用 [view addSubview:mySubView] 将它们添加到您的 View 中。

  3. 为您的表设置数据的更好方法是为您的 data 属性创建一个属性,并从已初始化的 View Controller 调用 setData MyTableController 实例。您将使用 setData: 方法来执行此操作。您可以在setData中调用[self.tableView reloadData]。您不需要在加载 View 时显式重新加载表,因为这是自动完成的。更次要的一点是,如果您继续使用 EditTable,我会将其重命名为更具描述性,并使用驼峰式大小写(例如 setDataForTable`)以与 iOS 约定保持一致。

  4. 您没有为 tableView:cellForRowAtIndexPath: 中引用的 listenom 属性显示任何初始化/分配。您是想改用 data 吗?

  5. 您的MyTableController.m 文件是完整版吗?如果是这样,您将缺少 viewDidUnloaddealloc 方法。两者都是必需的。 viewDidUnload 应该释放在 viewDidLoad 中分配的任何对象,dealloc 应该释放 Controller 保留的任何对象(包括在 viewDidUnload 中释放的对象) >.

关于iphone - UITableView刷新问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5271347/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com