1

SQLite fetch から戻り値を受け取りました

int primaryKey = sqlite3_column_int(statement, 0);

これをセレクターのオブジェクトとして使用します。

[[ABC alloc] performSelector:@selector(abcWithAAA:) withObject:[NSNumber numberWithInt:primaryKey]];

primarykey の NSLog 結果は数値 4 です。

NSLog(@"primaryKey:%i",primaryKey);
4

しかし、[NSNumber numberWithInt:primaryKey] の NSLog 結果は 131628896 です。

なぜ?int値を正しく変換するにはどうすればよいですか?

ありがとう!

4

4 に答える 4

4

withObject メソッドのキャストを行うアダプター メソッドを使用して問題を解決しました。私の問題は、typedef 列挙型を使用し、それを値として withObject に渡したいということでした。

performSelect メッセージを使用してこのメ​​ソッドを呼び出したいと思いました。

-(void) requestInfosAndPersistByMonsterType:(MonsterTypes)monsterType {

}

ご覧のとおり、次のように定義された MonsterTypes typedef を要求します。

typedef enum
{
    MonsterTypeIWerwolf = 0,
    MonsterTypeITempler = 1,
    MonsterTypeIUndefined,
} MonsterTypes;

実際に上記のメソッドを呼び出すことができるようにするために、それを呼び出すこのアダプターを構築します。

   -(void)monsterTypeFromObject:(id)_monsterType {
        if ([_monsterType respondsToSelector:@selector(intValue)]) {
            int _t = [_monsterType intValue];
            switch (_t) {
                case MonsterTypeIWerwolf:
                    _t = MonsterTypeIWerwolf;
                    break;
                case MonsterTypeITempler:
                    _t = MonsterTypeITempler;
                    break;
                default:
                    _t = MonsterTypeIUndefined;
                    break;
            }
            [self requestInfosAndPersistByMonsterType:_t];
        }
    }

次のように使用されます。

[self performSelector:@selector(monsterTypeFromObject:) withObject:[NSNumber numberWithUnsignedInt:monsterType] afterDelay:5.0f];

ここで詳細に説明されています: http://kerkermeister.net/objective-c-adapter-from-nsinteger-to-id-when-using-performselector-withobject/

于 2013-09-17T18:54:01.383 に答える
2

をログ[NSNumber numberWithInt:primaryKey]に記録すると、NSNumber オブジェクトのアドレスがログに記録されます。中身を見たい場合は[[NSNumber numberWithInt:primaryKey] intValue].

つまり、変換に問題があることを示唆するものは何もありません。

于 2012-04-09T13:19:41.103 に答える
2

[NSNumber numberWithInt:primaryKey]オブジェクトです。オブジェクトに使用%@します。

NSLog(@"%@", [NSNumber numberWithInt:primaryKey]);
于 2012-04-09T13:30:04.180 に答える
0

131628896 は、NSNumber オブジェクトのメモリ アドレスです。

使用する:

- (void)abcWithAAA: (NSNumber *)number {
      int primaryKey = [number intValue];
      NSLog("%i", primaryKey);
}
于 2012-04-09T13:21:53.367 に答える