我试图继承UILexicon,以便可以在init部分中创建自己的条目。但是,entries数组是只读的。如何为键盘扩展程序(iOS 8)中的自定义预测栏创建自己的词源?
最佳答案
Apple似乎没有将UILexicon和UILexiconEntry设计为可变的或创建可变的副本。我正在Swift中进行开发,其实现不允许实例化新的UILexiconEntry对象,尽管我可以实例化新的UILexicon对象,但无法将其添加到条目列表中。
因此,Objective C接口的行为类似似乎是合理的,并且文档支持这一说法:“Apple打算让您考虑将词典对象中的单词视为您自己设计的自动更正/建议词典的补充。”
幸运的是,为Lexicon条目创建自己的存储非常简单,NSDictionary可以直接存储它们。首先从现有UILexicon列表中加载条目,并使用userInput字符串作为每个条目的键,并使用item.userInput字符串作为对象。这是Swift中的示例,对于 objective-c 开发人员来说应该是可读的。
var myLexicon = NSMutableDictionary()
self.requestSupplementaryLexiconWithCompletion { (theLexicon: UILexicon!) -> Void in
let lexiconEntries = theLexicon.entries
// Completion handler
for item in lexiconEntries {
myLexicon.setObject(item.documentText, forKey: item.userInput)
}
}
请注意,使用NSDictionary从Lexicons中过滤出重复的条目,但这应该不是问题,因为每个userInput应该只输出到一个documentText。