【问题标题】:UITextField auto-suggest from a large databaseUITextField 来自大型数据库的自动建议
【发布时间】:2011-04-08 22:37:10
【问题描述】:

我正在尝试为 UITextField 添加建议。它们显示为文本字段下方的 UITableView,根据用户输入的内容显示一些条目(例如 Google Suggest)。

到目前为止,我尝试的唯一方法是从内部 SQLite 数据库中进行选择。这可行,但由于数据库非常大(大约 35000 个条目),因此速度非常慢。每次输入内容时,应用程序都会冻结 4 或 5 秒,然后才会显示新建议。所以我猜这个方法不是最好的。

我正在考虑在 NSDictionary 中映射所有内容,但我担心表格太大(大约 1.5MB)并且永久保留 NSDictionary 在内存方面会非常昂贵。

你们认为最好的方法是什么?

【问题讨论】:

  • 我正在为 iPad 实现相同的功能。但不知道如何。请帮帮我

标签: iphone sqlite uitextfield autosuggest


【解决方案1】:

你有没有想过使用 NSThread 创建表格视图将使用的数组? (尽管不要通过这个进行任何 UIKit 调用)。如果你在主线程上运行它,它会慢很多,特别是因为你的数据库很大。

如果您不知道 NSThread 的工作原理,请查看这个很棒的教程:http://www.xprogress.com/post-36-threading-tutorial-using-nsthread-in-iphone-sdk-objective-c/

【讨论】:

  • 好吧,使用线程可能是一种解决方案,但在用户键入和建议出现之间仍然会有延迟。应用商店中的现有应用会立即执行完全相同的操作(来自大型数据库的建议),所以我想一定有更好的方法。
  • 我现在尝试了这个,因为我检索了一部 iPhone 来工作,但它并没有解决问题。 UI 不再冻结,但结果仍需要几秒钟才能显示出来。
  • 它不滞后的事实很好 - NSThread 正在工作。缓慢是正常的,因此您的数据库非常大?
  • 是的。今天我做了很多改进,简化了查询,并尝试使用按起始字母对条目进行分组的临时表。它使查询几乎是即时的,但表的创建时间很长。也许绝对存储在单独的表中可以工作,但数据库中的 36 个表仅用于此(26 个字母 + 10 位数字),这不是很干净。
  • 嗯,它仍然不完美。在另一个做同样事情的应用程序上,它是完美的!所以我必须找到其他方法来改进它。
猜你喜欢
  • 2011-10-10
  • 1970-01-01
  • 1970-01-01
  • 2012-05-19
  • 2019-01-27
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
相关资源
最近更新 更多