首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NSSring错误

NSSring错误
EN

Stack Overflow用户
提问于 2012-07-11 18:38:41
回答 3查看 456关注 0票数 0

我对objective非常陌生,我得到了一个基本的错误,并且不确定如何修复它。

代码语言:javascript
运行
复制
  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数据库。

EN

回答 3

Stack Overflow用户

发布于 2012-07-11 18:43:05

如果int是一个对象(如果%@格式说明符没有造成崩溃,则不能将它转换为一个对象)。

假设直接将其与标签的text相关联,即它是NSString,则应该更改phpPost:的参数类型

代码语言:javascript
运行
复制
- (void)phpPost: (NSString *)barcode {
    labelScan.text = barcode; 
}

或者在传递intValue之前提取sym.data

代码语言:javascript
运行
复制
 [self phpPost:[sym.data intValue]];

然后在%d中使用适当的phpPost:格式说明符。

票数 3
EN

Stack Overflow用户

发布于 2012-07-11 18:42:27

你的条形码不是int,而是NSString。而不是执行(int)sym.data,而是传入[sym.data intValue]。它将正确地将其转换为整数。

获得随机数的原因是,不能仅仅将字符串对象强制转换为原始数据类型:)

票数 2
EN

Stack Overflow用户

发布于 2012-07-11 18:42:19

我不知道sym.data是什么类型,但它很可能是指向对象的指针,而不是值本身。您将该指针转换为int,因此在使用%d时,可以有效地打印对象的内存位置。这就是为什么每次运行程序时都会发生变化的原因(Objective,让我们在没有任何警告的情况下这样做--这是值得注意的事情)。

要解决这个问题,可以使用sym.data对象的属性从它提取所需的整数值;或者将对象作为指针传递。例如,您可以尝试像这样调用您的方法:

代码语言:javascript
运行
复制
[self phpPost:sym.data];

然后将您的方法更改为:

代码语言:javascript
运行
复制
- (void)phpPost: (id)barcode {
    NSString *theValue = [NSString stringWithFormat:@"%@", barcode];    
    labelScan.text = theValue;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11439210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档