3

コードを介してビューを構築しようとしています。私のinitにはこれがあります:

- (id) init{
    self = [super init];
    if(self){
       [self setFrame:CGRectMake(0, 0, 0, 50)];   
       [self addSubview:[self dateNumberView]];
        NSDictionary *views = NSDictionaryOfVariableBindings(self.dateNumberView);
       [self.dateNumberView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[dateNumberView]-|" options:0 metrics:nil views:views]];
    }
    return self;
}

私が得るエラーは次のとおりです。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Unable to parse constraint format:  dateNumberView is not a key in the views dictionary. |-[dateNumberView]-| 

なにが問題ですか?

4

3 に答える 3

7

使用しないでください:

NSDictionary *views = NSDictionaryOfVariableBindings(self.dateNumberView);

セクションがシステムによって誤解されているためself.です (KVC タイプのナビゲーション)。代わりに、ビューへのローカル参照を取得し、コード全体で使用します。

- (id) init{
    self = [super init];
    if(self) {
       UIView *dateNumberView = [self dateNumberView];

       [self setFrame:CGRectMake(0, 0, 0, 50)];   
       [self addSubview: dateNumberView];
        NSDictionary *views = NSDictionaryOfVariableBindings(dateNumberView);
       [dateNumberView addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"|-[dateNumberView]-|" options:0 metrics:nil views:views]];
    }

    return self;
}
于 2013-11-06T15:25:40.980 に答える
7

Usingself.は、オブジェクトを返すメソッドを呼び出すための単なる構文糖衣であり、キーとして使用できるものではありません。

代わりにこれを試してください:

NSDictionary *views = NSDictionaryOfVariableBindings(_dateNumberView);

自動合成されたプロパティを使用している場合、どちらが正しいはずです。

于 2013-11-06T15:25:49.103 に答える