NSNumber numberWithInt:nnid 错误

NSNumber numberWithInt:nnid error

我收到这个错误:

Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int'

它指向 nnid

我该如何解决这个问题?

// databaseden haberleri cek

-(NSMutableArray *)getNews: (NSInteger)nnid
{
    [database open];
    FMResultSet *results = [database executeQuery:
        @"SELECT * FROM news WHERE newsubid = ? order by ndate desc limit 0,50",
        [NSNumber numberWithInt:nnid]];

    NSMutableArray *tempdata2 = [NSMutableArray new];
    while ([results next]) {
        GundemNews* newsData = [GundemNews newsWithDBResultSet:results];
        [tempdata2 addObject:newsData];
    }

警告消息告诉您问题所在:您有一个 NSInteger,并且您正试图将其作为 int 传递。不要那样做。

为什么不呢?好吧,在您的平台上,NSIntegerlong 的类型定义——因此出现 'NSInteger' (aka 'long') 的警告。 long 是一个 64 位整数,而 int 是 32 位。所以,一个 NSInteger 可以容纳数字 4294967297,但是当你将它作为一个 int 传递时,它将以 1 结束。或者,更糟糕的是,3221225473 将以 -1073741823 结束。

在不同的平台上,NSInteger 可能是 int 的类型定义。但是,虽然这意味着您 可以不用 这段代码,但它仍然不是好的代码 — 一旦您在另一个平台上编译它,它就会神秘地中断。

只需使用 -numberWithInteger: 而不是 -numberWithInt:,像这样:

FMResultSet *results = [database executeQuery:
    @"SELECT * FROM news WHERE newsubid = ? order by ndate desc limit 0,50",
    [NSNumber numberWithInteger:nnid]];

正如文档所说,-numberWithInteger:“[c]创建并 returns 包含给定值的 NSNumber 对象,将其视为 NSInteger。” =28=]

你只需要换行

FMResultSet *results = [database executeQuery:@"SELECT * FROM news WHERE newsubid = ? order by ndate desc limit 0,50", [NSNumber numberWithInt:nnid]];

FMResultSet *results = [database executeQuery:@"SELECT * FROM news WHERE newsubid = ? order by ndate desc limit 0,50", [NSNumber numberWithInteger:nnid]];

出现警告是因为您试图将 NSInteger 值传递给需要 Int 值的方法。