我正在开发iOS的聊天应用程序。该应用程序将允许用户创建聊天室并与聊天室中的成员聊天(如IRC聊天室)。
应用程序的流程是;
batchsize
为20,performfetch
方法为。{1}}
在viewDidLoad
问题
问题
有没有更好的方法来处理这个要求?是否可以使用fetchresultcontroller?
如何以分页的方式加载聊天记录 - 比如sup或
viber - 使用fetchresultcontroller
。
答案 0 :(得分:11)
最好将数据变异和数据提取视为两个独立的任务,这样您就可以在途中优化它们。我高度考虑阅读this article以获取有关此事的更多信息:
CoreData大师Marcus Zarra向我展示了以下方法,该方法基于上述父/子方法,但增加了一个专门用于写入磁盘的附加上下文。如前所述,长时间写入操作可能会在短时间内阻塞主线程,从而导致UI冻结。这种智能方法将写入解耦为自己的私有队列,并使UI保持平滑按钮。
答案 1 :(得分:3)
您需要在后台线程上执行CoreData内容。这里有很多例子(here's one),但我的建议是使用MagicalRecord,它使CoreData并发操作变得非常简单。
答案 2 :(得分:0)
所有核心数据操作都在主线程中完成
这是你的问题。只有通过NSFetchResultController
的对象访问才能在主线程上。更新NSManagedObject
应在具有并发子NSManagedObjectContext
的后台队列上完成。
答案 3 :(得分:0)
对于你的问题2。
您创建一个新阵列-namely chatArray - 并从您的数据库中获取最后20个聊天记录,然后使用chatArray加载聊天表视图。 在Tableview标题上显示一个加载更多按钮,当用户到达顶部并点击该按钮时 -
从chatArray中删除所有对象,并从您的数据库中添加最后20条聊天记录,然后再次重新加载您的表。这个过程继续。
我在fetchresultcontroller中并不强大,并会做一些研究并让你知道。