我对objective非常陌生,我得到了一个基本的错误,并且不确定如何修复它。
for(ZBarSymbol *sym in syms) {
resultText.text = sym.data; //sym.data = 0012044012482
[self phpPost:(int)sym.data];
break;
}
}
- (void)phpPost: (int)barcode {
NSString *theValue = [NSString stringWithFormat:@"%@", barcode]; //problem line
labelScan.text = theValue;
//labelScan.text = @"Barcode scanned";
}当我使用“%@”标签的文本是正确的(0012044012482),但当我使用@"%d“时,它不是(每次我重新启动应用程序时随机数)。我想使用“%”(或一些有用的东西),但出于某种原因,xCode给了我一个错误。我不知道该怎么纠正这个错误。
错误是:
格式指定'id‘类型,但参数具有'int’类型。
最后,我计划使用POST方法将该代码(sym.data)写入MySQL数据库。
发布于 2012-07-11 18:43:05
如果int是一个对象(如果%@格式说明符没有造成崩溃,则不能将它转换为一个对象)。
假设直接将其与标签的text相关联,即它是NSString,则应该更改phpPost:的参数类型
- (void)phpPost: (NSString *)barcode {
labelScan.text = barcode;
}或者在传递intValue之前提取sym.data
[self phpPost:[sym.data intValue]];然后在%d中使用适当的phpPost:格式说明符。
发布于 2012-07-11 18:42:27
你的条形码不是int,而是NSString。而不是执行(int)sym.data,而是传入[sym.data intValue]。它将正确地将其转换为整数。
获得随机数的原因是,不能仅仅将字符串对象强制转换为原始数据类型:)
发布于 2012-07-11 18:42:19
我不知道sym.data是什么类型,但它很可能是指向对象的指针,而不是值本身。您将该指针转换为int,因此在使用%d时,可以有效地打印对象的内存位置。这就是为什么每次运行程序时都会发生变化的原因(Objective,让我们在没有任何警告的情况下这样做--这是值得注意的事情)。
要解决这个问题,可以使用sym.data对象的属性从它提取所需的整数值;或者将对象作为指针传递。例如,您可以尝试像这样调用您的方法:
[self phpPost:sym.data];然后将您的方法更改为:
- (void)phpPost: (id)barcode {
NSString *theValue = [NSString stringWithFormat:@"%@", barcode];
labelScan.text = theValue;
}https://stackoverflow.com/questions/11439210
复制相似问题