3

私はまだ IOS SDK を学んでいるので、うまくいけばこれは理にかなっています。私はまだドット構文を使用して頭を包み込もうとしています。このコードが機能しないのに、2 番目のコードが機能する理由を誰かが説明できますか?

動作していません:

-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionView *cell = [collectionView cellForItemAtIndexPath:indexPath];
    [[cell contentView] setBackgroundColor:[UIColor blueColor]];
}

働く:

-(void)collectionView:(UICollectionView *)collectionView didDeselectItemAtIndexPath:(NSIndexPath *)indexPath
{
    UICollectionView *cell = [collectionView cellForItemAtIndexPath:indexPath];
    cell.contentView.backgroundColor = [UIColor blueColor];
}

最初のコードがうまくいかない理由がわかりません。Xcodeの最新バージョンを使用しています。setBackgroundColor メソッドは別のものに廃止されましたか?

4

1 に答える 1

1

ドット表記を使用する場合は、プロパティ名を変更する必要がないことに常に注意してください。したがって、持っていると言う場合:

@property (nonatomic) NSString *message;

コンパイラがsetterおよびgetterメソッドを処理するため、このプロパティでドット表記を使用するために必要なことは次のとおりです。

self.message;         // getter
self.message = @"hi"; // setter
// the only difference being - which side of the = sign is your property at

一方、セッター/ゲッターの動作を変更したい場合setMessage、次の方法でメソッドを定義して、独自の を実装する (オーバーライドしない) 必要がありsetterます。

- (void)setMessage:(NSString *)message {
    // custom code...
    _message = message;
}

多分それはあなたが混乱していることです。に関しては、それはまだそこにあります。ドット表記setBackgroundColorを使用してアクセスしないだけです。ちなみに、これにより、次のようなあらゆる種類のきちんとしたものが可能になります。

// .h
@property (nonatomic) int someNumber;

// .m
self.someNumber = 5;   // calls the setter, sets property to 5
self.someNumber += 10; // calls the setter and getter, sets property to 15
self.someNumber++;     // calls the setter and getter, sets property to 16
于 2013-05-15T22:11:44.150 に答える