0

これはコードです:

NSNumber *taskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];    
NSInteger *intTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];

self.taskListViewControllerのメソッドNSArrayのコアデータフェッチリクエストで満たされたものです。is:1 is:269303816実際 には 、 コアデータに格納される値は次のとおりです:1viewDidLoad
taskId
intTaskId

以下は私の質問です:
1、私はなぜNSInteger間違っているのか混乱していますか?2、他の問題を回避するため
に交換NSIntegerする必要がありますか?NSNumber

4

1 に答える 1

3

NSNumberはオブジェクトですが、NSIntegerは単にtypedefプリミティブ(非オブジェクト)タイプ(のようなint)の場合です。のサブクラスでNSIntegerはありませんNSNumber。Core Dataは、のインスタンスとして数値を返しますNSNumberNSInteger型のオブジェクトを指しているNSNumberが、それを単なる整数であるかのように出力しようとしているため、奇妙な値を取得しています。

問題を回避するNSIntegerには、に置き換える必要があります。メソッドを使用して、 :を取り戻すNSNumberこともできます。intValueNSNumberNSInteger

NSNumber *objTaskId = [[self.taskList objectAtIndex:indexPath.row] valueForKey:@"identity"];
NSInteger *intTaskId = [objTaskId intValue];

比較(より大きい、等しい、より小さい)または算術(またはのようなプリミティブ型にを追加することはできません)を実行する場合は、これを行う必要がありNSNumberます。NSNumberNSNumberintfloat

于 2012-06-17T10:25:43.313 に答える