我收到此错误:
隐式转换失去整数精度:'NSInteger'(又名'long')到'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];
}
答案 0 :(得分:0)
警告消息告诉您问题:您有一个NSInteger
,并且您尝试将其作为int
传递。不要那样做。
为什么不呢?好吧,在您的平台上,NSInteger
是long
的typedef - 因此警告显示'NSInteger' (aka 'long')
。并且long
是64位整数,int
是32位。因此,NSInteger
可以保留数字4294967297,但当您将其作为int
传递时,它将以1结尾。或者更糟糕的是,3221225473最终将为-1073741823。
在其他平台上,NSInteger
可能是int
的typedef。但是,虽然这意味着你躲过这段代码,但它仍然不是好代码 - 只要你在另一个平台上编译它就会神秘地破解代码。
只需使用Using DNS to redirect to another URL with a path代替-numberWithInt:
,就像这样:
FMResultSet *results = [database executeQuery:
@"SELECT * FROM news WHERE newsubid = ? order by ndate desc limit 0,50",
[NSNumber numberWithInteger:nnid]];
正如文档所说,-numberWithInteger:
“[c]会创建并返回包含给定值的NSNumber
对象,并将其视为NSInteger
。”
答案 1 :(得分:0)
您只需更改行
即可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
值的方法。