我试图做一个简单的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!
答案 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];