Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 在用户仍可以使用UI的情况下在后台运行进程_Iphone_Ios_Xcode - Fatal编程技术网

Iphone 在用户仍可以使用UI的情况下在后台运行进程

Iphone 在用户仍可以使用UI的情况下在后台运行进程,iphone,ios,xcode,Iphone,Ios,Xcode,我试图在后台运行数据库获取进程,而不锁定用户界面 目前我有一个按钮,可以做到这一点,但我希望它是自动的,以便它可以得到更多的结果,因为用户正在浏览当前的结果 这是按钮所做的代码,我想使其自动,而不是锁定UI。另外,如果有一种方法可以暂停该过程,但如果用户转到另一个屏幕,则可以在该过程停止的地方继续,这也是非常有用的 提前谢谢 -(IBAction)continueUpdatingResultsButtonPressed:(UIButton*)sender{ [findMoreButton rem

我试图在后台运行数据库获取进程,而不锁定用户界面

目前我有一个按钮,可以做到这一点,但我希望它是自动的,以便它可以得到更多的结果,因为用户正在浏览当前的结果

这是按钮所做的代码,我想使其自动,而不是锁定UI。另外,如果有一种方法可以暂停该过程,但如果用户转到另一个屏幕,则可以在该过程停止的地方继续,这也是非常有用的

提前谢谢

-(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标志,以便它在否时处于活动状态,但如果是,它将中断循环。这只是一个新手的建议,可能是更好的方法,但它很有效。