5

私は今日、2つのバグを追跡することに時間を費やし、同じソリューションを使用して両方を修正することになりました。

解決策がわかったので、その背後にある明確さを得たいと思っていました。

Core Data(Integer 16 / NSNumber)の属性を整数(ABPropertyID&ABMultiValueIdentifier)と比較しています。

バグはこの比較にあり、奇妙なことに、(バックグラウンドトレイから)アプリを強制終了し、再度開いて、比較と同じプロセスを実行した後にのみ現れました。いずれかの方法...

これは、再起動後に動作を停止したものです。

if (myNumber.aProperty == [NSNUmber numberWithInt:anInteger]) { /* do stuff here */ }

そして、これらはこれまでのところ完全に機能している2つのソリューションです。

if ([myNumber.aProperty integerValue] == anInteger) {/* do stuff here */ }

if ([myNumber.aProperty isEqualToNumber:[NSNumber numberWithInt:anInteger]]) { /* do stuff here */ }

私には、それらはすべて同じに見えます。私は常にNSNumberをintegerValueに変換するか、整数をNSNumberに変換しています。

何か案は?

4

3 に答える 3

11

==を比較するために使用しないでくださいNSNumber。ほとんどの場合、2つの異なるオブジェクトを比較するため、比較はtrueと評価されません。if条件を見ると、特にプロパティを新しい NSNumberオブジェクトと比較していることに注意してください。

NSIntegerは特定の値型のCocoaラッパーであるため、sとの比較はNSInteger問題==なく機能します。

の実装はisEqualToNumber:おそらくラップされた値型を取り、それらも比較します。

于 2011-03-24T06:16:12.937 に答える
2

あなたが言ったように、両方のソリューションが機能しています...

NSNumberをintに変換した後、整数を比較しているので、より読みやすいように見えるので、最初のものをお勧めします。

2番目の例では、intをオブジェクトに変換してから、2つのオブジェクトを比較します...これは、最初のケースにはない2番目のメソッド呼び出しです...

お役に立てれば... : )

于 2011-03-24T06:16:25.850 に答える
1

netWorkingButtonsIndexesはオブジェクトを保持する配列であり、 はデータ型LinkedInの数値です。int

[[netWorkingButtonsIndexes objectAtIndex:buttonIndex] isEqual:[NSNumber numberWithInteger:LinkedIn]] 

このisEqualメソッドを使用することで、オブジェクトを任意のデータrtypeと比較できます。

于 2012-02-10T08:32:23.027 に答える