是使用performSelector:afterDelay:排队或命令方法的最有效方法?

时间:2014-03-07 12:50:34

标签: ios objective-c cocoa-touch uitableview

这就是我的应用程序现在的样子:

enter image description here

单击保存按钮后,在上图中的视图编号7中的详细控制器中执行数据库更新后,详细信息将保存在数据库中。我将回到tableView编号5,并期望相关行通过调用parse.com框架中的特殊方法来显示最新更新,该方法重新加载对象并刷新表格视图,例如[self loadObjects]。

我使用unwind segue。在视图7中,我在界面构建器中的保存按钮和它的控制器窗口的退出符号之间建立连接,然后在tableView编号5中,我有与此连接相对应的segue方法。

展开segue方法:

-(IBAction)saveDetailsButtonTapped:(UIStoryboardSegue *)segue {
    // alert goes here
    [self performSelector:@selector(didTapRefreshButton:) withObject:self afterDelay:1.0];
}

此方法清除表并加载对象的第一页:

- (IBAction)didTapRefreshButton:(id)sender {
    [self loadObjects];
}

当在视图编号7上单击保存时,详细信息将保存到数据库,用户将被回购到表视图编号5,然后上述方法在1.0延迟后运行。我觉得这样可以,但感觉不太对劲。我在手机上试了一下,有时延迟时间不够长,意味着刷新失败。

然后我决定尝试使用UIAlertView委托方法来检测警报视图的ok按钮何时被按下并且大多数时间都正常工作但是然后我按下OK以在返回到视图时很快就解除警报数据没有重新加载。

是否有更好的可靠方法来刷新我的数据?

我需要某种方式知道数据库更新是否成功,然后才运行[self loadObjects]方法并自动执行此操作。

我有两种方法可以检测对象何时加载(例如,当按下按钮时)以及何时加载对象。我已经在其中放置了一些微调器代码,以便在加载时显示微调器,并在完成后将其取走。

是不是有某种方法来排队方法,比如一些方法如何使它成为一件事情,直到另一件事情发生才会发生?

如果是这样,我真的很感激一些见解和例子,因为我可以将应用程序标记为完整,但即使我没有得到报酬,这是慈善工作,我仍然有努力做到最好。

感谢您的时间。

亲切的问候

1 个答案:

答案 0 :(得分:2)

  

我已经在那里放了一些微调器代码来显示加载器正在进行加载时,并在完成后将其取走。

你应该在这里做点什么。

  

我需要一些方法来了解数据库更新是否成功,然后才运行[self loadObjects]方法并自动执行此操作。

因为您要保存到解析,所以它应该是解析SDK,它会在保存完成时告诉您。如果您在后台保存(应该是这样),那么在为您提供保存完成时调用的回调块时,请使用save方法。被调用的这个块是你移除微调器和segue的触发器。

旁注: -

是的,有几种不同类型的队列,最好比使用performSelector:...,但是还有其他方法可以处理异步活动,您应该查看异步活动以获得指导。也就是说,我可以在完成后收到回调,而不是等待多长时间并希望它完成。