どのように私は私がそのintValueたいとき偶然のNSNumberのポインタを使用してから自分自身を防ぐことができますか?

StackOverflow https://stackoverflow.com/questions/1898091

質問

私が本当に好きなのJavaの特徴の一つは、コンパイラが自動的にプリミティブとそのラッパークラス間の変換をするオートボクシング、である。

私は、Objective-Cの/ココアコアデータアプリケーションを書いている、と私はそれがイライラする私の整数をプログラム属性に対処するために探しています。その理由は次のとおりです。

//img is a managed object that I have fetched

NSString* filename = [NSString stringWithFormat:@"image%d.png", [[img valueForKey:@"imageID"] intValue]];  
私は時々やるintValueメッセージを、忘れてしまった場合、

、そしてstringWithFormat:に渡されるintが実際にポインタ値である。

何のコンパイラエラーまたは警告を -

問題は、これは完全に静かに起こらないということです。この愚かな、愚かなことが問題であるとき時々私はあまりにも長い間デバッグを費やすます。

そのトラップに捕まるから私を防ぐために、私のプログラミングスタイルや、私のコンパイラの設定を変更する方法はありますか?

の編集:私は上記の例は、私がトラブルに実行する多くの場所のひとつであるという事実について明確ではありませんでした。ここでは文字列で行う必要はありません別の仮想的な例を示します:

CollegeClasscourseNumber

エンティティenrollmentLimitは、2つの整数の属性を持っています。のは、私はコース番号を比較したいとしましょう。

//classFoo is a NSManagedObjects I've fetched
if ([[classFoo valueForKey@"courseNumber"] intValue] < 400) {
    NSLog(@"undergraduate class");
}

または同様に、私はCS部門のすべてのクラスの平均定員を計算する必要があるとします。

役に立ちましたか?

解決

  

...私はCS部門内のすべてのクラスの平均定員を計算する必要があるとします。

これはにNSArrayのとやるのは簡単ですそして、NSSetの@avg演算子する

:もちろん、それが問題#2に戻ってあなたを置くのNSNumberを返します。
  

の私はコース番号を比較したいとしましょう。

//classFoo is a NSManagedObjects I've fetched
if ([[classFoo valueForKey@"courseNumber"] intValue] < 400) {
    NSLog(@"undergraduate class");
}

私はあなたがリスクの問題は、それによってintValueへのNSNumberオブジェクトのidを比較し、intメッセージを省略していることを意味すると仮定します。

コンパイラは、このような比較のために警告を提供しています。 Xcodeで、あなたの「その他のCフラグ」ビルド設定に-Wextraを追加します。より多くの警告オプションについては、GCCの警告を参照完全なリストはを。

他のヒント

あなたは、文字列の代わりに、%dに直接のNSNumberを変換するために、%の@を使用することができます。

これは実際にどのNSObjectのベースクラスを取ると、私は信じてそれを文字列に変換します。

これは、コアデータを扱うときにのみ適用されますが、あなたはのためのクラスを生成するために MOGenerator に使用している場合(私はとにかくやってお勧めします)、あなたのコアデータオブジェクトは、その後、直接-[propertyName]Valuesを返すプロパティの正しい値にアクセスするためにNSNumberメソッドを使用することができます:

// These two methods are identical when called on a class 
// which was generated with MOGenerator
[[object imageID] intValue];
[object imageIDValue];
それはまだないのであれば、

、「です。TypeCheckはprintf呼び出し/ scanf」警告をオンにします。これは、は現在、はNS / CFStringに書式設定のヘルプは、私はレーダーの拡張要求を提出してきましたしない(X-レーダー://問題/ 7375186)そのために。もちろん、自分自身をファイルに歓迎しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top