在iOS 8.1和8.2上的构造函数之后崩溃在self.view中

时间:2015-05-15 09:04:18

标签: ios xcode uiview uiviewcontroller

我试图做一个简单的SpriteKit动作 - 为场景添加一个视图:

UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"LevelsEditorStoryboard" bundle:[NSBundle mainBundle]];
self.levelsEditor = [mainStoryboard instantiateViewControllerWithIdentifier:@"LevelsEditorId"];
[self.scene.view addSubview:self.levelsEditor.view];

在iOS 8.0和8.3上工作正常,在iOS 8.1和8.2上我收到以下错误:

SPBingo[75304:80943666] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UITextSelectionView name]: unrecognized selector sent to instance

我意识到这次崩溃是由UITextField造成的。 一旦我摆脱它,用一些UITextView替换UITextField(不理想,但无论如何)视图正在加载但是当我尝试点击UITextView时它崩溃了。其他输入视图工作(switch,dataPicker,tableView等)

深入研究后,我发现承包商已经出现了问题。当我在以下代码的第二行放置断点时:

-(instancetype) initWithCoder:(NSCoder *)aDecoder
{
    self = [super initWithCoder:aDecoder];
    if(self)
    {
    }
    return self;
}

并尝试打印" self.view"我收到以下错误:

error: Execution was interrupted, reason: internal ObjC exception breakpoint(-3)..

该过程已返回到表达式评估之前的状态。 ODD!

2 个答案:

答案 0 :(得分:0)

在调用“viewDidLoad:”方法签名之前,您无法访问该视图,否则它会尝试在所有先决条件到位之前创建视图。

确保在正确设置后,从“viewDidLoad:”,“viewWillAppear:”或“viewDidAppear:”调用self.view。

答案 1 :(得分:0)

所以..这是Apple的内部错误,它在8.1中创建并在8.3中修复。 解决方案是避免使用UITextView承包商“initWithFrame”并使用以下方法:

UITextView *textView = [[UITextView alloc] initWithFrame: frame textContainer: textContainer];