1

Javaから来て、私はオートボクシングにかなり慣れています。ここでは、intは必要に応じて自動的に整数にラップされ、整数はプリミティブにボックス化解除される場合があります。iOS5で信頼できる類似のものはありますか?

現在、私はコアデータを使用していますが、入力し続けるには多くの入力が必要です

 number.intValue
 //or 
number.boolValue 

方程式などでNSNumberを直接使用する方法はありますか?例えば:

int x = 5+ nsNumberInstance;

さらに、コアデータで番号を再割り当てする必要があるたびに、このような新しいオブジェクトを作成しています。

managedObject.dynamicProperty = [NSNumber numberWithInt: int];

すでに作成されているNSNumberの値を変更するためのより良い方法はありますか?10年後の手根管から身を守るために、どのような気の利いたショートカットを使用できますか?

ありがとうございました!

4

2 に答える 2

7

実際、データモデルを使用していて、[NSManagedObjectサブクラスの作成]メニュー項目を使用する場合、[プリミティブデータ型にスカラープロパティを使用する]というタイトルのオプションを選択できます。

多くの場合、これにより自動的に処理されます。
ここではいくつかの例を示します。

BOOL:
@property (nonatomic, retain) NSNumber * aBool;
になります
@property (nonatomic) BOOL aBool;

NSDate:
@property (nonatomic, retain) NSDate * aDate;
になります
@property (nonatomic) NSTimeInterval aDate;

整数32:
@property (nonatomic, retain) NSNumber * aNumber;
になります
@property (nonatomic) int32_t aNumber;

フロート:
@property (nonatomic, retain) NSNumber * aFloat;
になります
@property (nonatomic) float aFloat;

NSDecimalNumberとNSStringは同じままです。

すでにサブクラスを生成している場合は、以前に生成されたヘッダーファイルでこれらを自分で変更できます。アクセサメソッドは、サブクラスを再生成しなくても自動的に更新されます。

于 2012-01-01T16:45:10.910 に答える
3

Cocoaバインディング以外では、CocoaまたはCocoa touchでスカラー型のオートボクシングが行われている場所は他に多くないので、残念ながらそこでは運が悪いです。

計算でNSNumbersを操作しても実際には何も得られないため、そこでオブジェクトを処理する必要はありません。スカラー型を操作し、これらの数値をCore Dataや配列などに格納するときに、NSNumbers間を行ったり来たりする方がはるかに簡単です。この形式のままにしておきたい1つのケースは、NSDecimalNumbersです。数値を標準の浮動小数点値として使用するため、これらのタイプの小数を処理しようとしたときに表示されるグリッチを回避できます。

Core Dataはオブジェクトを格納するため、基本レベルでそれを回避することはしませんが、スカラー値を取得して返すNSManagedObjectサブクラスでカスタムアクセサーを使用することで、作業を少し楽にすることができます。Appleは、Core Dataプログラミングガイドの「マネージドオブジェクトアクセサメソッド」セクションにこの例を示しています。ここでは、NSNumberを使用する代わりに、CGFloat値のアクセサを設定する方法を示しています。

@interface Circle : NSManagedObject
{
    CGFloat radius;
}
@property CGFloat radius;
@end

@implementation Circle

- (CGFloat)radius
{
    [self willAccessValueForKey:@"radius"];
    float f = radius;
    [self didAccessValueForKey:@"radius"];
    return f;
}

- (void)setRadius:(CGFloat)newRadius
{
    [self willChangeValueForKey:@"radius"];
    radius = newRadius;
    [self didChangeValueForKey:@"radius"];
}
@end

-intValueちなみに、 andのドット構文を使用する-boolValueことは、機能しますが、お勧めしません。これらはプロパティではなく、NSNumbersから値を抽出する一方向のメソッドです。コードでこれを明確にするために、角かっこを扱う場合は角かっこを使用してください。

于 2011-11-09T19:01:03.773 に答える