我有一个似乎困扰着我的小问题。 我的UITableViewController子类在选择TableViewCell时以异步方式加载数据。像这样...
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"clickROW");
itemData *selectedItemData;;
selectedItemData = [[[DataManager sharedDataManger]getAllDataItems] objectAtIndex:indexPath.row];
[[DataManager sharedMischaManager] loadDataItemDetailsAsync:selectedItemData.Now];
好的,到目前为止一切顺利,loadDataItemDetailsAsync
在完成加载后发布通知。然后我的UITableViewController子类被正确通知,创建一个新的View并将其推送到它的NavigationController ..
到目前为止一切正常......
但是,因为异步加载可能需要一段时间(取决于当前的带宽),我希望在加载时显示/动画UIActivityIndicatior。
所以我做的是以下(在我的UITableViewCell子类中)
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state
if(selected)
{
[self.contentView bringSubviewToFront:loader];
[tvImageView setHidden:YES];
[loader setHidden:NO];
[loader startAnimating];
//[loader performSelectorInBackground: @selector(startAnimating) withObject: nil];
}
else {
//[loader performSelectorInBackground: @selector(stopAnimating) withObject: nil];
[loader stopAnimating];
[loader setHidden:YES];
[tvImageView setHidden:NO];
}
}
我尝试了两种方式来“启动加载器”,performSelectorInBackGround
- 方式和简单的[loader startAnimating]
方式。它们都不起作用。
我想我错过了一个基本的步骤(比如重绘/重新显示,我不知道)我似乎无法自己弄清楚:(
任何帮助,提示,提示veeeery赞赏
欢呼声
SAM
答案 0 :(得分:1)
如果您使用Core Data(即使您使用简单的内存数据库,如果您不需要持久保存到磁盘)并结合NSFetchedResultsController
,那么您不必处理所有状态管理。
您只需对对象进行更改,然后NSFetchedResultsController
将通知任何更改对象的委托(您的UITabelViewController应该实现)。在该委托中,您只需更改UITableViewCell,如显示/隐藏活动指示符或状态文本。
这一切都采用简单而正式的协议。
检查NSFetchedResultsControllerDelegate Protocol Reference以获得良好的概述。