将int与存储在字典中的数字进行比较

时间:2012-11-02 03:25:45

标签: objective-c ios nsarray nsdictionary

我有一个字典数组,其中我有一个整数的键值,我想将这个键值与另一个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 个答案:

答案 0 :(得分:2)

问题是,您无法在字典中存储基元。所以你永远无法正确地比较那样。发生了什么事情,你正在比较一个对象的地址与它。不太可能匹配。

使用以下命令获取字典对象的整数值

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
         }
}

答案 1 :(得分:2)

数组中的数字存储在NSNumber对象中。您需要从intValue对象获取NSNumber

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

如果您在Xcode 4.5中使用最新的LLVM编译器,可以将其写为:

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

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

答案 2 :(得分:0)

尝试

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

代替。因为你不能将Integer值存储到数组或字典中。它应该是NSNumber或其他类型(也是id类型)。


顺便说一句,不应该是

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

代替?我发现sortedArray是一个数组。

答案 3 :(得分: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类型并用于比较。