在iOS 8上向我的应用程序添加自定义输入视图时,我遇到了一个问题.这在iOS 7上运行得非常好,但当切换到iOS 8时,一切都失败了.

这是堆栈跟踪:

2014-06-03 21:23:54.237 MyApp[1910:47245] *** Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'child view controller:<UICompatibilityInputViewController: 0x1103f9d40>
should have parent view controller:<StopChooser: 0x11083e200> but requested parent is:<UIInputWindowController: 0x110858800>'
*** First throw call stack:
(
    0   CoreFoundation                      0x00000001042eee35 __exceptionPreprocess + 165
    1   libobjc.A.dylib                     0x0000000103b919a0 objc_exception_throw + 45
    2   CoreFoundation                      0x00000001042eed6d +[NSException raise:format:] + 205
    3   UIKit                               0x00000001023d94cd -[UIViewController _addChildViewController:performHierarchyCheck:notifyWillMove:] + 184
    4   UIKit                               0x0000000102977a2b -[UIInputWindowController changeToInputViewSet:] + 416
    5   UIKit                               0x0000000102973f56 -[UIInputWindowController moveFromPlacement:toPlacement:starting:completion:] + 185
    6   UIKit                               0x000000010297826a -[UIInputWindowController setInputViewSet:] + 526
    7   UIKit                               0x0000000102973c97 -[UIInputWindowController performOperations:withAnimationStyle:] + 50
    8   UIKit                               0x00000001027559bb -[UIPeripheralHost(UIKitInternal) setInputViews:animationStyle:] + 1054
    9   UIKit                               0x0000000102422afd -[UIResponder becomeFirstResponder] + 468
    10  UIKit                               0x00000001023235d3 -[UIView(Hierarchy) becomeFirstResponder] + 99
    11  UIKit                               0x00000001029cdbfb -[UITextField becomeFirstResponder] + 51
    12  UIKit                               0x0000000102655d61 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) setFirstResponderIfNecessary] + 177
lib: terminating with uncaught exception of type NSException
    (lldb) 

相关部分是最上面的几行.有人能解释一下吗?我只打myTextview.inputView = keyboard;键盘是在故事板中创建并通过IBOutlet链接的UIView.

推荐答案

我以前遇到过这个问题.

Problem:

  • 必须确保要指定给inputViewinputAccessoryView的视图不属于任何父视图.从ViewController内的xib创建这些视图时,默认情况下,它们被设置为superview的子视图.

Solution Tips:

  • 在将指定给inputViewinputAccessoryView的视图上使用方法removeFromSuperview

Objective-c相关问答推荐

如何声明仅调试语句

如何追踪 SIGABRT 的原因

NSArray 添加元素

如何在 Cocoa 中创建字符串的 MD5 哈希?

如何为代码自动格式化设置 Xcode 插件

是否可以在 nsstring 中包含引号?

如何构建一个 Objective-C 静态库?

如何在 XCode 中复制文件?

设置数据后调整 UICollectionView 单元格的大小

dispatch_async(dispatch_get_main_queue(), ^{...});等到完成?

Objective-C 实例变量?

如何确定 UICollectionView flowLayout 中单元格之间的间距

distanceFromLocation - 计算两点之间的距离

如何将 NSNumber 转换和比较为 BOOL?

Objective C - 如何连接整个字符串数组?

IOS 中的圆形进度条

如何配置我的应用程序 - 菜单项被禁用?

围绕其中心旋转 UIView 保持其大小

有没有办法在用户已经在 iOS 上拒绝相机访问权限后向他们询问?

Objective-C:如何向 NSURL 添加查询参数?