0

我对 Objective-c 很陌生,我遇到了一个基本错误,不确定如何修复它。

  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 数据库。

4

4 回答 4

3

如果它是一个对象(如果格式说明符没有导致崩溃int,则它必须是) ,您不能只是通过强制转换将它转换为。%@

假设您将它直接分配给一个标签text,它是一个NSString,您应该更改参数类型phpPost:

- (void)phpPost: (NSString *)barcode {
    labelScan.text = barcode; 
}

或提取intValue之前通过sym.data

 [self phpPost:[sym.data intValue]];

然后%dphpPost:.

于 2012-07-11T18:43:05.527 回答
2

您的条形码不是int,而是NSString。与其做(int)sym.data,不如传入[sym.data intValue]。那应该正确地将其转换为整数。

你得到一个随机数的原因是你不能只将字符串对象转换为原始数据类型:)

于 2012-07-11T18:42:27.000 回答
0

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

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

[self phpPost:sym.data];

然后将您的方法更改为:

- (void)phpPost: (id)barcode {
    NSString *theValue = [NSString stringWithFormat:@"%@", barcode];    
    labelScan.text = theValue;
}
于 2012-07-11T18:42:19.690 回答
0

好吧,我今天上班的时候想了想,发现 INT 不适合我。如果我将该对象设为 int,我会丢失一些对我正在做的事情至关重要的数据。例如。对象=001234 整数=1234。我需要零。所以,最后,我将它保留为一个对象(字符串)并将其传递给函数。

这是我正常工作后的代码。

for(ZBarSymbol *sym in syms) {
        resultText.text = sym.data;
        [self phpPost:sym.data];
        break;
    }
}

- (void)phpPost: (NSString *)barcode {
    labelScan.text = barcode;
    //labelScan.text = @"Barcode scanned"; //My custon label
}

感谢大家的回应。您的答案不会被使用。我相信我很快就会在这里需要这些信息。

哦,如果您发现我做错了,或者方法不正确,请发表评论并告诉我。

于 2012-07-12T02:21:27.713 回答