【问题标题】:UIReferenceLibraryViewController hasDictionaryDefinition only works in Simulator on iPhone 5sUIReferenceLibraryViewController hasDictionaryDefinition 仅适用于 iPhone 5s 上的模拟器
【发布时间】:2014-10-08 14:32:21
【问题描述】:

当我调用这段代码时:

NSString* word = @"hello";
bool response = [UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word];

...在 iPhone 5s 或更高版本上,我在“响应”中得到了正确的值(一个布尔值,取决于变量“单词”是否在本地字典中定义。在模拟器上执行大约需要 500 毫秒.

但是,当我在 iPhone 4s、5、6 或 6+ 模拟器(但不是 5s)上调用它时,它会立即返回 false 并将以下内容写入日志:

 +[_UIDictionaryManager _availableDefinitionDictionaries] returned nil. 
Error: Error Domain=ASError Code=21 "The operation couldn’t be completed. 
(ASError error 21 - Unable to copy asset information)" 

字典功能应该可以在 iOS 5+ 上运行。我没有任何 iPhone 4s/5/6/6+ 设备可以对此进行测试。

发生了什么事?

【问题讨论】:

  • 只是为了好玩,您是否尝试进行清理/重建?
  • 我现在有,但没有修复。奇数。
  • 也许是 32/64 位的东西!
  • 模拟器或设备上是否也出现此错误?另外,你在iOS7.1模拟器上看到同样的问题吗?
  • 据我所知,它只是模拟器,但我没有很多设备可以测试它。我的部署目标是 7.1,基础 SDK 是 8.0

标签: ios objective-c iphone


【解决方案1】:

我想我最终找到了答案,即控制台中的消息试图说用户没有安装字典。

事实

[UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word];

在以下情况下返回 false:

  • 单词未定义
  • 没有安装字典

这实际上真的很无用。我在我的特定英语应用用例中处理所有这些的策略是:

  1. 如果 [UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word] 返回 true,则调用当前的“定义函数”并返回。

  2. 但是,如果它返回 false,则调用 dictionaryHasDefinitionForTerm 时应使用所有英文词典中都应定义的单词,例如“the”或“word”。

  3. 如果“the”或“word”返回 true,则说明已安装词典,但该词在已安装词典中未定义。缓存“the”/“word”的结果,这样您就不必重复第 2 步,但不要永久保存它,因为用户或系统可能会删除词典 - 整个词典系统似乎非常有问题。

  4. 如果“the”或“word”返回 false,我们可以认为没有安装字典。此时我调用该函数来呈现原始单词的定义(自然会显示为“无定义”,但这是用户访问“管理”字典功能以安装字典的唯一方法!) ,以及一个对话框,说明用户需要单击“管理”并安装英语词典,如果他们想要单词定义。

距离理想还有很长的路要走,但不确定在我的用例中我还能做什么。

【讨论】:

    【解决方案2】:

    不确定这是否真的回答了问题,但您可能有兴趣了解以下内容:

    1. 如果您打开UIReferenceLibraryViewController(即使在应用程序之外,例如从 Safari)在此处点击管理以显示字典列表(即使没有下载任何内容),当前模拟器的错误也会消失。
    2. 在模拟器上重置内容和设置会恢复错误 - 直到您再次执行 #1。
    3. 奇怪的是,在设备上我经常在dictionaryHasDefinitionForTerm: 中得到YES,即使我在控制器中看到“未找到定义”。

    其中一些肯定是一个错误:-)
    我很想知道是否有人在 #3 中也有同样的行为,因为它闻起来比在原木中乱扔垃圾更糟糕。

    【讨论】:

      【解决方案3】:

      如果您进入模拟设备上的设置,General:Dictionary 并选择您要使用的词典,该功能将起作用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多