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
传递。不要那样做。
为什么不呢?好吧,在您的平台上,NSInteger
是 long
的类型定义——因此出现 '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
值的方法。
我收到这个错误:
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
传递。不要那样做。
为什么不呢?好吧,在您的平台上,NSInteger
是 long
的类型定义——因此出现 '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
值的方法。