iOS8委托方法中的nil对象-自定义键盘

iOS8委托方法中的nil对象-自定义键盘,ios,ios8,delegates,ios-app-extension,Ios,Ios8,Delegates,Ios App Extension,我正在制作一个自定义键盘 我正在我的InputViewController中实现以下委托方法 但是我总是得到\u textInput=nil\u - (void)textWillChange:(id<UITextInput>)textInput - (void)textDidChange:(id<UITextInput>)textInput - (void) selectionWillChange:(id<UITextInput>)textInput - (v

我正在制作一个自定义键盘 我正在我的
InputViewController
中实现以下委托方法
但是我总是得到
\u textInput=nil\u

- (void)textWillChange:(id<UITextInput>)textInput
- (void)textDidChange:(id<UITextInput>)textInput
- (void) selectionWillChange:(id<UITextInput>)textInput
- (void) selectionDidChange:(id<UITextInput>)textInput
-(void)textWillChange:(id)textInput
-(无效)textDidChange:(id)textInput
-(无效)选择将更改:(id)文本输入
-(无效)selectionDidChange:(id)文本输入
有人知道怎么修吗?
这是不是有原因的
nil

我需要自己实现什么吗?

好问题。但看来,
uitPutDelegate
并不是您实现的协议

来自苹果文档,标题为:

由于外部原因在文本视图中发生更改时, 它们不是由文本输入系统调用
uiteOutput
对象应发送
textWillChange:
textDidChange:
selectionWillChange:
,以及
selectionDidChange:
输入消息 委托(它持有对其的引用)。例如,当用户点击 文本视图,您可以设置选定文本的范围以放置 插入手指下方的点,您将发送
selectionWillChange:
更改所选范围之前,请发送
selectionDidChange:
在你改变范围之后

来自现场代表:

UIKit提供一个私有文本输入委托,它在 类采用的对象的inputDelegate属性的运行时 UIPUT协议

这意味着我们不实施这些委托方法;我们使用它们通知
inputDelegate
您已通过键盘输入以外的方式更改了文本或选择

以下是一个说明这一点的方法:

- (void)delete:(id)sender;
{
    if (selection && ![selection isEmpty]) {
        [inputDelegate textWillChange:self];
        [inputDelegate selectionWillChange:self];
        [self replaceRange:selection withText:@""];
        [inputDelegate selectionDidChange:self];
        [inputDelegate textDidChange:self];
    }
}

包含更多示例的示例代码。

苹果的API只提到“textInput类采用UIT输出协议的文档实例”。这并没有什么帮助。苹果公司有这方面的示例代码吗?这方面的迷雾太多了。现在在beta 6中,对
textInput
的任何调用都会导致键盘崩溃。@bauerMusic您正在调用self.textDocumentProxy吗?您指的是哪个文本输入?传递给
textDidChange:
delegate的实例。考虑到你原来的帖子,我也在等待关于这个
id
实例是什么的一些答案。仅限Apple注意:其类采用UIT输出协议的文档实例。。然而,它是零,现在调用它或试图打印它,甚至访问它,导致键盘崩溃。@bauerMusic我猜它崩溃是因为它是零,不是吗?