我有一个字典数组,其中我有一个整数的键值,我想将这个键值与另一个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
答案 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类型并用于比较。