0

我有一个字典数组,其中我有一个整数键值,我想将这个键值与另一个 int 进行比较,就像这样......

while ([myInt != [[sortedArray valueForKey:@"MODID"] objectAtIndex:count]]) {

计划是我循环遍历字典数组,直到找到与它们匹配的条目,然后将计数值传递到我需要使用它的位置。

但是我得到这个作为我的警告......然后当它执行时它永远找不到匹配的值......

Comparison between pointer and integer ('int' and 'id')

我也在同一行收到错误

Implicit conversion of 'int' to 'id' is disallowed with ARC
4

4 回答 4

3

问题是,您不能将原语存储在字典中。因此,您将永远无法像那样正确比较。那里发生的事情是您正在将对象的地址与它进行比较。非常不可能匹配。

使用以下内容获取字典对象的整数值

while (myInt != [[[sortedArray valueForKey:@"MODID"] objectAtIndex:count] integerValue]) {

根据我对您的数据结构的了解,我会选择这样的东西。

for(NSDictionary *d in sortedArray){
    NSArray *subarray = [d objectForKey:@"MODID"];
    for(int i=0; i<[subarray count]; i++){
        if( [[subarray objectAtIndex:i] integerValue] == myInt){
             //you have found it, do whatever you need, and break from the loop
         }
}
于 2012-11-02T03:32:03.933 回答
2

数组中的数字存储在一个 NSNumber 对象中。您需要intValueNSNumber对象中获取。

while (myInt != [[[sortedArray valueForKey:@"MODID"] objectAtIndex:count] intValue]) {

如果你在 Xcode 4.5 中使用最新的 LLVM 编译器,你可以这样写:

while (myInt != [sortedArray[@"MODID"][count] intValue]) {

编辑:在这种情况下,速记符号实际上不起作用。我忽略了valueForKey:原始代码中的使用。我读它时objectForKey:认为这是一本带有数组的字典。但它是一系列字典。

于 2012-11-02T03:32:38.537 回答
0

尝试

while ([myInt != [[[sortedArray valueForKey:@"MODID"] objectAtIndex:count] intValue])

反而。因为您不能将整数值存储到数组或字典中。它应该是 NSNumber 或其他类型(或者是id类型)。


顺便说一句,不应该是

while (myInt != [[[sortedArray objectAtIndex:count] valueForKey:@"MODID"] intValue])

反而?我发现那sortedArray是一个数组。

于 2012-11-02T03:32:43.533 回答
0

您可以看到这些警告,因为您可能正在尝试引用具有 int 等数据类型的对象。

for(NSDictionary *d in sortedArray){
    NSArray *subarray = [d objectForKey:@"MODID"];
    for(int i=0; i<[subarray count]; i++){
        if( [[subarray objectAtIndex:i] integerValue] == myInt){
             //you have found it, do whatever you need, and break from the loop
         }
}

如果您观察这一行[[subarray objectAtIndex:i] integerValue],您可以很容易地理解对象被转换为 int 类型并用于比较。

于 2012-11-05T07:06:41.780 回答