在 viewDidLoad 之前延迟表视图加载或加载数组?
Posted
技术标签:
【中文标题】在 viewDidLoad 之前延迟表视图加载或加载数组?【英文标题】:Delay table view loading or load array before viewDidLoad? 【发布时间】:2014-07-05 17:27:44 【问题描述】:我正在使用网络服务来填充一组项目,然后用这些项目填充我的表格视图的单元格。
现在我遇到了表格视图本身的问题。当我检查“numberofrows”方法时,数组还没有加载。出于某种原因,它会在“之后”加载(根据我的 nslogs 和断点),即使我已经尽可能早地将每个加载方法放在该控制器中。
现在我不知道的是:
有没有办法延迟表视图的创建,所以我确定我的数组已加载? 有没有办法提前加载我的阵列?这是我在 viewDidLoad 中的第一行。 (调用另一个类,然后调用 webservice 并返回一个数组,但此时表格视图已经加载并为空)。我尝试过:放置一个 tableview reloadData。但这根本行不通。由于某种原因,编译器读取了该行,但没有加载任何新内容,即使此时数组已满。
我错过了什么吗?
(如果我将硬编码的对象放入数组中,我的 tableview 就可以正常工作)
我可以编辑和添加一些你们会要求的代码,但由于这看起来像是学校的问题,也许我只是忘记了一些东西。
伙计们,我全神贯注! 编辑:
我的不同方法;我已经删除了不必要的代码以便更清晰地阅读。 编译器永远不会进入 cellForRow,因为 numberOfRows 返回一个零数字。
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
static NSString *cellIdentifier = @"CustomCellTableViewCell";
CustomCellTableViewCell *cell = [self.tbUpcomingEvents dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath];
cell.lbTitle = [_eventList objectAtIndex:indexPath.row];
return cell;
行数; nslog 返回零。
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
NSLog(@"numOfRows : %i", [_eventList count]);
return [_eventList count];
我的webservice方法,这是从“webservice类”中调用来加载数据的方法。 在这里,NSLog 显示了一个完整的数组。
- (void)loadData:(NSMutableArray*)arrayEvent
//arrayEvent is full from the internet data. eventList is also full on the NSLog.
_eventList = arrayEvent;
NSLog(@"LoadData : %i", [_eventList count]);
[self.tbUpcomingEvents reloadData];
我的 viewdidLoad 方法
- (void)viewDidLoad
[super viewDidLoad];
//Calling my UseCaseController to load the data from the internet.
UCC *sharedUCC = [UCC sharedUCC];
[sharedUCC getUserEventsInDbDis:self :_user];
【问题讨论】:
请同时显示调用 reload tableview、numberOfRowsInSection、numberOfSections 和 cellForRow 方法的代码 我已根据您的要求进行了编辑! numberOfSections 只是默认的 1,所以我没有办法。 加载数据和 numberOfRows 中的断点。在 loadData 之后会调用 numberOfRows 吗?在加载数据中注销self.tbUpcomingEvent
以确保其不为零。注销self.tbUpcomingEvents.delegate
以确保它也已设置。
numberOfRows 确实是首先被调用的。好吧,我猜这个问题放大了。在我的加载数据中,表格视图和委托正在记录(空)。我不知道为什么,如果我发送硬编码数据,一切都已连接,并且 tableview 工作正常。
它是否在 View 中注销为 null 是否加载?
【参考方案1】:
正如您所说,您正在使用网络服务。所以它在块中执行你的代码,这意味着它在单独的线程中运行。现在根据苹果文档 UI 更新应该发生在主线程中。因此,对于表创建,您需要在下面的 GCD 代码中包含相同的内容:-
dispatch_async(dispatch_get_main_queue,()^
// write your code for table creation here
);
【讨论】:
虽然这个答案可能是正确的,但在你知道它是一个答案之前,不要随便吐出答案。许多其他事情可能是错误的。我们不应该对解决方案进行随机猜测,而是花时间确保我们理解问题。 我从未使用过这样的代码,但您的行似乎很简单。我只需要了解这一点就可以尝试一下:GCD 代码是什么? Grand Central Dispatch 是我相信 NSThread 的包装器。它用于线程操作。大多数 API 调用都是在后台线程上完成的。上面的这个方法将确保块中的操作在主线程上运行。许多 UI 操作必须在主线程上完成。以上是关于在 viewDidLoad 之前延迟表视图加载或加载数组?的主要内容,如果未能解决你的问题,请参考以下文章