5

CoreDataのEntityプロパティを64ビット整数にしたい。モデルはiOSで実行される予定であり、これらのデバイスが64ビットではないことを知っている限り、それNSNumberが進むべき道であると考えました(コアデータは、プリミティブ型のオブジェクトまたはスカラープロパティのオプションを提供します)。私はそれNSNumberが64ビットの適切な表現を追跡することを内部的に処理すると仮定しています。

ここで、ある時点でエンティティのこの「64ビット」プロパティから1を引く必要があります(推測しなかった場合は、64ビットプロパティはTwitter APIのmax_idパラメーターです)が、そのためには、まずNSNumberプロパティ内の番号のボックスを解除する必要があります。

だから私はintValueを取得する必要がありますか?longValue?unsignedIntValue?unsignedLongValue?長い長い?どれ?

4

3 に答える 3

8

型 (64 ビット整数) は既にわかっているので、確認する必要はありません。

NSNumber から 64 ビット整数を取得するには、次のいずれかを実行します。

NSInteger myInteger = [myNSNumber integerValue];
int64_t   myInteger = [myNSNumber integerValue];

1つだけ追加するには、次のようなものを使用できます。

myNSNumber = [NSNumber numberWithInteger:[myNSNumber integerValue]+1]];

iOSにはint64_tや などの 64 ビット データ型があることに注意してくださいNSInteger

編集:
使用している唯一の理由がNSNumber64 ビット整数を格納することである場合は、モデル サブクラスで次のようにプロパティを宣言し、ボックス化解除/ボックス化を完全にスキップできます。

@property (nonatomic) int64_t myIntValue;

NSManagedObject サブクラスの作成機能のプリミティブ データ型にスカラー プロパティを使用するオプションを選択した場合、コア データはデフォルトでこれを行うことに注意してください。

于 2012-05-26T00:05:27.657 に答える
0

NSNumberに含まれるCタイプを取得するには、objCTypeを使用します

NSNumber *myFloat = [NSNumber numberWithFloat:5.5f];
NSLog(@"%s", [myFloat objCType]);

型floatの値が含まれているため、「f」を出力します。

また、Cタイプの文字を返す@encode()もチェックしてください。

NSNumber *myFloat = [NSNumber numberWithFloat:5.5f];
if (strcmp(myFloat) == @encode(float)) { 
    NSLog(@"This is a float");
}

また

NSNumber *myFloat = [NSNumber numberWithFloat:5.5f];
CFNumberType numberType = CFNumberGetType((CFNumberRef)myFloat);
于 2012-05-25T23:58:12.653 に答える
0

Try putting this in a NSNumber category:

-(int64_t) int64value
{
    if (sizeof(short) == 8)
        return [self shortValue];
    if (sizeof(int) == 8)
        return [self intValue];
    if (sizeof(long) == 8)
        return [self longValue];
    if (sizeof(long long) == 8)
        return [self longLongValue];

    return -1; // or throw an exception
}
于 2012-05-25T23:33:17.473 に答える