UIReferenceLibraryViewController hasDictionaryDefinition仅适用于iPhone 5s上的模拟器

时间:2014-10-08 14:32:22

标签: ios objective-c iphone

当我调用此代码时:

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

...在iPhone 5s或更高版本的iPhone上,我得到正确的值,以及#39;响应' (bool取决于变量' word'是否在本地词典中定义。在模拟器上执行大约需要500ms。

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

 +[_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 +设备来测试它。

发生了什么事?

2 个答案:

答案 0 :(得分:2)

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

事实

[UIReferenceLibraryViewController dictionaryHasDefinitionForTerm:word];
如果符合以下情况,

返回false:

  • 这个词未定义
  • 没有安装词典

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

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

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

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

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

  5. 离理想很远,但不确定我在用例中还能做些什么。

答案 1 :(得分:1)

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

  1. 如果您打开UIReferenceLibraryViewController(即使在应用程序外部,例如来自Safari)点按“管理”以显示字典列表(即使没有下载任何内容),当前错误也会消失模拟器。
  2. 重置模拟器上的内容和设置会收到错误 - 直到您再次执行#1。
  3. 奇怪的是,在设备上我经常在YES中获得dictionaryHasDefinitionForTerm:,即使我在控制器中看到“找不到定义”。
  4. 其中一些肯定是一个错误:-)
    我很好奇,知道是否有人在#3中有相同的行为,因为它闻起来比在日志中乱扔垃圾更糟糕。