2017-05-27 81 views
2

简介:NSLayoutConstraint'的观点是不是一个关键的观点dictionary`

是的,我已经通过所有的,涉及到这个问题的问题看,没有一个答案帮助。下面的代码一直在抛我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; 
} 

然后在-(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)]]; 

的权利,它与异常终止。为什么?

回答

2

使用自我。只是为了调用一个返回对象的方法,而不是你可以用作关键字的东西,这是你做错了。使用下面的方式,它将修复您的崩溃问题:

[self.sceneView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|[_sceneView]|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(_sceneView)]]; 
1

其实,NSDictionaryOfVaribaleBindings是宏

_NSDictionaryOfVariableBindings(@ “” #VA_ARGSVA_ARGS,无),

你的使用将作为它是什么变量在代码中,所以你会得到一个@ {“self.sceneView”:self.sceneView}的NSDictionary,你将需要改变成类似于@“H:| [self.sceneView] |”使其工作。