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

当您 log 时[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 回答