gpt4 book ai didi

iOS:使用 CoreData 的聊天应用程序

转载 作者:行者123 更新时间:2023-11-28 17:58:31 25 4
gpt4 key购买 nike

我正在为 iOS 开发一个聊天应用程序。该应用程序将允许用户创建聊天室并与聊天室中的成员聊天(如 IRC 聊天室)。

应用程序的流程是;

  1. 用户可以加入聊天室
  2. 消息将存储在 coradata 支持的 SQLite 中数据库
  3. 没有引用本地消息和服务器中的消息(所有与特定用户相关的消息仅存储在他的本地数据库中)
  4. 我正在使用 NSFetchResultController 来更新和刷新聊天 table 。当收到聊天时,它将被存储到数据库中,表格 View 将加载新的聊天。
  5. 所有核心数据操作都在主线程中完成
  6. 获取请求的 batchsize 是 20,performfetch 方法是在 viewDidLoad
  7. 中调用

问题

  1. 收到聊天消息后,UI 会挂起一段时间 (1 -在 iPhone 4 中为 2 秒)。 (如果我暂停执行,它会显示在获取 Controller 的 [tableview endUpdate] 中发生了什么代表)
  2. 要转到当前聊天 View 中的最新聊天,用户必须从数据库加载所有聊天

问题

  1. 有没有更好的方法来处理这个要求?使用 fetchresultcontroller 可以吗?

  2. 我怎样才能以分页方式加载聊天 - 比如什么 sup 或viber - 使用 fetchresultcontroller

  3. 如果我将后台模式与多个托管对象上下文一起使用,性能会有所提高吗?

最佳答案

  1. 即使使用 NSFetchedResultsController 也非常好,它专为此类操作而设计。
  2. 批量大小有点像分页。看看this post ,第一个答案展示了如何使用分页等限制和批量大小。
  3. 取决于您的意思,更新/保存到核心数据可以在后台线程中很好地处理(我建议这样做)。获取是另一回事,请记住 all UI changes have to be be done on the main thread. .

最好将数据突变和数据获取视为两个独立的任务,这样您就可以在进行中同时进行优化。我高度考虑阅读 this article有关此事的更多信息:

CoreData guru Marcus Zarra has shown me the following approach which builds on the above Parent/Child method but adds an additional context exclusively for writing to disk. As alluded to earlier a lenghty write operation might block the main thread for a short time causing the UI to freeze. This smart approach uncouples the writing into its own private queue and keeps the UI smooth as button. enter image description here

关于iOS:使用 CoreData 的聊天应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22195212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com