【问题标题】:UILexicon in Objective-CObjective-C 中的 UILexicon
【发布时间】:2014-09-14 23:38:10
【问题描述】:

你如何在 Objective-C 中使用 UILexicon?我发现 Apple 提供的文档非常无用。

它有什么作用?它是否返回字典或正确的单词拼写?或者我是否提供了一个像“hellllo”这样的词,它与正确的拼写“Hello”匹配,并将其作为字符串返回?

任何帮助将不胜感激。

requestSupplementaryLexiconWithCompletion:


这是我的错误报告,但显然我会有错误,因为我完全在猜测如何使用该函数,不知道块语句中的内容(因为文档(当时)没有说!( Beta 4 文档))哈哈哈!

【问题讨论】:

  • 您的代表应该知道这样的问题应该包括有关崩溃和错误的详细信息以及相关代码。
  • 它可能没有帮助,因为它是预发布。不要指望它会是该文档的最终版本。
  • @rmaddy 实际上没有具体的错误,应用程序甚至无法运行,因为我根本不知道如何使用该功能。它会崩溃的原因与int j = 0.5; 崩溃的原因相同。我没有正确使用该功能。
  • @rmaddy 添加了我的错误报告。
  • requestSupplementaryLexiconWithCompletion 方法来自UIInputViewController 类,而不是NSString

标签: ios objective-c ios8 custom-keyboard uilexicon


【解决方案1】:

我从未使用过此功能,但通过快速网络搜索“UILexicon”让我进入了 Apple 的文档;从那里阅读和点击链接很快就填满了图片。

App Extension Programming Guide 快速解释了词典的用途:

每个自定义键盘(与其RequestsOpenAccess 键的值无关)都可以通过UILexicon 类访问基本的自动更正词典。利用这个类以及您自己设计的词典,在用户输入文本时提供建议和自动更正。

单击该页面上的UILexicon 链接将我带到该课程的参考文档,该文档解释说它是Apple 提供的术语对的只读列表。它的每个条目都是一个UILexiconEntry 对象——该类的文档说它提供了一个userInput(用户键入的内容,例如“ipad”)和一个documentText(替代它的东西,例如“iPad ”)。由于这些类是只读的,因此它们可能不是您提供自己的自动更正对的一种方式 - 如文档中所述,它们用于补充您实现的任何自动更正系统。


在这一点上,我什至不需要查看requestSupplementaryLexiconWithCompletion: 的文档来了解如何使用它:只是声明告诉我:

  • 这是UIInputViewController 上的一个方法,我必须继承该类来创建自定义键盘。在那个子类的某个地方,我可能应该在self 上调用它。
  • 它的返回类型是void,所以我无法通过将requestSupplementaryLexiconWithCompletion 调用的结果分配给变量来获取词典。
  • 它调用我提供的块,将UILexicon 对象作为参数传递给该块。
  • 其中包含“request”和“completionHander”之类的词,因此它可能会执行一些需要一段时间的异步操作,并在完成后调用该块。

所以,我猜如果我正在编写自定义键盘,我会尽早调用此方法(可能在 viewDidLoad 中)并存储它提供的 UILexicon,以便以后可以参考它用户正在打字。像这样的:

@property UILexicon *lexicon;

- (void)viewDidLoad {
    [super viewDidLoad];
    [self requestSupplementaryLexiconWithCompletion:^(UILexicon *lexicon){
        self.lexicon = lexicon;
    }];
}

因为不清楚requestSupplementaryLexiconWithCompletion 需要多长时间才能完成,所以我在使用self.lexicon 的任何地方都应该检查它是否是nil


回到App Extension Programming Guide,它在“iOS 用户期望的键盘功能”下列出了“自动更正和建议”,然后说:

您可以决定是否实现这些功能;刚刚列出的任何功能都没有专用的 API

所以听起来自动更正是你必须自己做的事情,你自己的 UI 是 UIInputViewController 子类呈现的视图的一部分。编程指南中的API Quick Start for Custom Keyboards 部分似乎暗示了您将如何做到这一点:使用documentContextBeforeInput 查看用户最近输入的内容,使用deleteBackward 删除它,使用insertText: 插入更正.

【讨论】:

  • 嗨,首先非常感谢您花时间写下这个详细的答案。这实际上是我计划使用 UILexicon 的方式,假设它是一个 NSDictionary。 :) 我仍然不完全确定我了解如何获取 UILexicon 对象。在viewDidLoad 的 UIInputViewController.m 中我调用什么? UILexicon *theLexicon = (UILexicon *)[self requestSupplementaryLexiconWithCompletion:nil]; ?
  • 您提到了块语句,所以我知道情况并非如此,我只是不知道在我放nil 的地方放什么......类似于^() { } 的东西对吗?我认为那部分是完成处理程序,但我仍然不知道如何格式化它而不会在 xCode 中出现错误。不幸的是,我也不知道在哪里包含请求部分。这是我正在努力解决的部分:)
  • 啊,所以你对块不熟悉。 Apple has a doc for that. 我会编辑我的答案...
  • 谢谢!所以现在我让它工作了,我有一个 UILexicon 对象......我收集条目并查看字符串,但是当我写一点 while 循环以将它们全部返回到日志中以确保我有一个完整的字典价值单词(哈哈)它只返回 12 个单词……那么我应该如何使用它来进行自动更正,就像 Apple 文档建议的那样?只有大约 15 个单词,所以 99% 的拼写错误的单词甚至不会出现在列表中。 --> 代码:i.stack.imgur.com/jzjS4.png
  • 您是否看到文档中关于它是补充的部分(甚至方法名称)? “常规”自动更正是四个自定义键盘来实现自己 - 这是您将键盘与其他键盘区分开来的机会。除了您自己的之外,该词典还可以提供针对设备、用户和特定情况的更正。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-28
  • 2012-07-17
  • 2011-09-20
  • 2012-01-15
  • 2019-09-18
  • 2011-12-06
  • 2011-10-03
相关资源
最近更新 更多