0

pList から小さな整数 (4 など) を取得し、後で操作するために管理対象オブジェクトに入れようとしています。しかし、管理オブジェクトから取り出して NSInteger に入れるようになるまでには、完全に変更されています。4 が 237371328 になりました!

番号は pList に "Number" として格納され、管理対象オブジェクトには整数 16 として格納されます。整数 16 の timesAsNumber と文字列の timesUsed の 2 つのフィールドがあります (現在の回避策です!)。

関連するコード行は次のとおりです。

NSArray *usageFetchResults = [self.objectContext executeFetchRequest:request error:&error];

NSLog(@"Here is the usageArray: %@, with error: %@",usageFetchResults, error);

これにより、ログの結果が得られます。

データ: {\n 機能 = ビデオ;\n timesAsNumber = 4;\n timesUsed = 4;\n})" )、エラーあり: (null)

したがって、ロガーは timesAsNumber の値が 4 であることを認識しています。

NSLog(@"timesAsNumber straight from the Managed Object: %@", [currentUseData valueForKey:@"timesAsNumber"]);

結果を生成します: 管理対象オブジェクトから直接 timesAsNumber: 4 なので、まだ問題ありません。

でも、

NSInteger timesUsedAsInt = [currentUseData valueForKey:@"timesAsNumber"];
NSLog(@"times As Number now reads: %ld", (long)timesUsedAsInt);

結果を生成します: 回 As Number は現在読み取ります: 237371328

操作のために数値を整数として持つ必要があり、文字列として保存して前後に変換するという私の回避策はほとんどエレガントではありません!

私は高校のコンピューティングを教えているので、浮動小数点数の格納について知っています: 超過 127、2 の補数などです。整数が pList、マネージド オブジェクト、および NSInteger に格納されるさまざまな方法から問題が発生すると思います。ただし、それらの保存方法が何であるかがわからないため、それらを操作できません。

感謝して受け取った助け。

ティム。

4

1 に答える 1

1

plistまたはに数値を格納する場合はcoreData、NSNumber として格納されます。したがって、値に としてアクセスしますNSInteger myInt = myNumber.intValue。元に戻す場合は、 を使用しますNSNumber *myNumber = [NSNumber numberWithInt:myInt]NSNumberを に変換するのを忘れたために、その大きな数 (237371328) が表示される可能性がありますint。お役に立てれば。

編集:

試す:

NSInteger timesUsedAsInt = [[currentUseData valueForKey:@"timesAsNumber"] intValue];
NSLog(@"times As Number now reads: %ld", (long)timesUsedAsInt);
于 2013-08-11T11:21:49.740 に答える