2

だから私はここで何が間違っているのか分かりません。私のクラスには、基本的に 2 つのプロパティがあります。

@property (nonatomic, retain) NSString *name;
@property (nonatomic, readonly) BOOL isValid;

ロジックは、名前が nil でない場合は isValid=YES、それ以外の場合は NO であると想定されています。だから私はそれを次のように書きました:

- (BOOL)isValid {
    if (self.name)   // breakpoint was set here.
       return YES;
    else 
       return NO;
} 

説明を印刷すると、逆の効果が得られます。理由がわからない。このためにデバッガーをステップスルーしようとしました。このメソッドで停止し、自分自身の値を見ると、nameプロパティを見ると値が nil です。しかし、ステップインした直後、デバッガーが return NO ステートメントにあるときname、正しい値が設定されたプロパティがあります。

その条件に基づいてオブジェクトが作成されたときに isValid フラグを設定するだけでよいと思いますが、self.name が nil であるかどうかを読み取ることができれば、その必要はないと思いました。誰でもこれをトラブルシューティングする方法について何か考えがありますか? ありがとう。

編集: 私のスーパークラスは NSObject です。

この同じクラスには、本質的に同じタイプのロジックを持つ 2 つのプロパティがあります。

@property (nonatomic, retain) NSString *AA;
@property (nonatomic, readonly) BOOL isCodingRegion;

- (BOOL)isCodingRegion {
    if (self.AA) {
        return YES;
    }
    else {
        return NO;
    }
}

そして、このロジックは機能します。

4

0 に答える 0