Iphone 在用户仍可以使用UI的情况下在后台运行进程
我试图在后台运行数据库获取进程,而不锁定用户界面 目前我有一个按钮,可以做到这一点,但我希望它是自动的,以便它可以得到更多的结果,因为用户正在浏览当前的结果 这是按钮所做的代码,我想使其自动,而不是锁定UI。另外,如果有一种方法可以暂停该过程,但如果用户转到另一个屏幕,则可以在该过程停止的地方继续,这也是非常有用的 提前谢谢Iphone 在用户仍可以使用UI的情况下在后台运行进程,iphone,ios,xcode,Iphone,Ios,Xcode,我试图在后台运行数据库获取进程,而不锁定用户界面 目前我有一个按钮,可以做到这一点,但我希望它是自动的,以便它可以得到更多的结果,因为用户正在浏览当前的结果 这是按钮所做的代码,我想使其自动,而不是锁定UI。另外,如果有一种方法可以暂停该过程,但如果用户转到另一个屏幕,则可以在该过程停止的地方继续,这也是非常有用的 提前谢谢 -(IBAction)continueUpdatingResultsButtonPressed:(UIButton*)sender{ [findMoreButton rem
-(IBAction)continueUpdatingResultsButtonPressed:(UIButton*)sender{
[findMoreButton removeFromSuperview];
[self continueFindingMoreRecipes]; //(do this in background without locking screen)
[self loadRefreshButton];//At completion load this button (a blinking button) to refresh the cells with new results
}您可以执行批处理请求,在该请求中,您可以在每次用户界面使用当前端的Y时缓存下一个X数量的答案。根据您使用的是什么,许多数据库都有可以帮助您轻松进行批缓存的协议。祝你好运 您可以使用的典型模式如下:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
// perform data processing here (done in the background)
dispatch_async(dispatch_get_main_queue(), ^{
// update user interface here (done on the main thread)
});
});
使用中央调度。创建一个新队列,用一个块分派它,当需要更新时,调用dispatch get main queue。但是,一旦队列被调度,就无法暂停此操作。可能将配方加载到中间层,然后根据需要进行更新 寻找一些gcd教程,那里有一些不错的 会给你更多的代码,但我在iPhone上打字 我觉得(特别是因为您自己“对编程非常陌生”),在后台队列中预取数据可能不明智,请确保后台队列的数据库操作与前台的数据库操作相协调(可能通过类似于's
FMDatabaseQueue
或类似的方式),在转到其他屏幕时优雅地处理暂停此操作(如您在问题中所指出的),并确保不会在过程中导致保留周期
更糟糕的是,如果我理解正确的话,我想这一切都是为了追求一个可能有问题的目标,在后台检索10000份食谱。别误会我的意思。你当然可以像我们概述的那样设计所有后台操作,但我想你应该停下来问问自己,这是否是正确的设计为您的业务问题
我可能会建议一个非常简单的解决方案。只需将前x个配方加载到tableview中,当用户向下滚动时,当您开始接近tableview的末尾时,检测该事实并检索下一个x记录并将其添加到tableview中。但任何希望用户浏览10000个条目的用户界面都会这样做当我想到一个有10000个条目的数据库时,我想到的是类似imdb/wikipedia/google/facebook的用户界面,而不是联系人式的用户界面
无论如何,你几乎肯定不希望你的应用程序只是在后台无休止地检索配方。你可以解决你的UI性能问题,但也可以用内存管理问题来代替。当你不完全清楚配方应用程序是否需要时,你将要设计一个复杂的系统架构。这是纯ge牛:谢谢!这将有助于解决一个暂时的问题:)我想取消循环中需要有一个BOOL在这方面做了一些工作,但我认为值得一提的是,要取消循环,应该在循环中设置一个BOOL标志,以便它在否时处于活动状态,但如果是,它将中断循环。这只是一个新手的建议,可能是更好的方法,但它很有效。