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

問題は、プリミティブを辞書に格納できないことです。したがって、そのように正しく比較することはできません。そこで何が起こっているかというと、オブジェクトのアドレスを it と比較しています。一致する可能性は非常に低いです。

次を使用して、辞書オブジェクトの整数値を取得します

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 オブジェクトに格納されます。intValueオブジェクトからを取得する必要がありNSNumberます。

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 に答える