0

"enabled@ プロパティが変更されたかどうかを確認する textFields にオブザーバーがあります。

 (void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *) context;
{


UITextField *txtField = (UITextField *)object;




BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue];
BOOL old = [[change objectForKey:NSKeyValueChangeOldKey] boolValue];


if ((new != old) && (new = YES))
{

 [self fadeDisable:txtField];
}

else if ((new != old) && (new = NO))
{
    [self fadeEnable:txtField];

}

int new と int old を使用すると、プロパティが有効かどうかを定義する 1 または 0 が返されると思いましたが、NSLog を使用して何を返すかを確認すると、長い数字の文字列になります。

ドキュメントを調べたところ、objectForKey は実際には整数ではなく ID を返すようですが、どうすればよいかわかりません。

編集:無効から有効(またはその逆)になったかどうかを判断しようとする比較用のコードを追加しました。また、推奨されるように boolValue 修正を追加しました。

意図した結果が得られず、正しいメソッドが呼び出されません。それが正しいか?ありがとう

4

1 に答える 1

1

NSDictionaryNSNumberプリミティブ型 ( など) ではなく、オブジェクト ( など) を含みますint。お気づきのとおり、

[change objectForKey:NSKeyValueChangeNewKey]

戻りますid。intに変換したい場合は、

int new = [[change objectForKey:NSKeyValueChangeNewKey] intValue]

または、プロパティが BOOL の場合は、さらに優れています。

BOOL new = [[change objectForKey:NSKeyValueChangeNewKey] boolValue]

このコード行

int new = [change objectForKey:NSKeyValueChangeNewKey]

NSNumberオブジェクトへのポインターの値をnew整数に格納することになります。これは、あなたが言及した「数字の長い文字列」です。奇妙なことに、警告なしでコンパイルされます。

于 2013-06-26T12:17:34.413 に答える