NSLayoutConstraint`view不是views字典中的键`

COO*_*IES 3 objective-c ios nslayoutconstraint

介绍:

是的,我已经浏览了与该主题相关的所有问题,所有答案都无济于事。下面的代码不断使我抛出NSInvalidArgumentException异常,但我仍然看不到它出了什么问题。

题:

我已经尝试了所有可能尝试的方法。它仍然崩溃,并始终显示相同的错误消息。'Unable to parse constraint format: sceneView is not a key in the views dictionary.'

这是我的工作:

- (SCNView *)sceneView { // Lazy Load
  if (_sceneView == nil) {
    _sceneView = [[SCNView alloc] initWithFrame:self.bounds];
    _sceneView.backgroundColor = [UIColor blackColor];
    _sceneView.scene = self.scene; // Load scene
    _sceneView.translatesAutoresizingMaskIntoConstraints = NO;

  }
  return _sceneView;
}
Run Code Online (Sandbox Code Playgroud)

然后在中-(void)commonInit,将其添加:

if ([self.sceneView isDescendantOfView:self] == NO) {
    [self addSubview:self.sceneView];
  }

  [self.sceneView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[sceneView]|"
                                                                         options:0
                                                                         metrics:nil
                                                                           views:NSDictionaryOfVariableBindings(self.sceneView)]];
Run Code Online (Sandbox Code Playgroud)

此后,它异常终止。为什么?

Alo*_*lok 5

使用自我。仅用于调用返回对象的方法,您不能将其用作键,这是您做错的。使用以下方式,它将解决您的崩溃问题:

[self.sceneView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_sceneView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_sceneView)]];
Run Code Online (Sandbox Code Playgroud)