0

次のコードを使用して、「myDict」という辞書ファイルに格納されている1または0の値を確認しています。位置'block003stored'は値1であり、他のすべての位置では0です。次のコードを使用すると、すべての位置で常に0が返されます。

for (int i = 1 ; i < 100 ; i++) {
    if(myDict)
    {
    UIImageView *imageV = (UIImageView *)[self.view viewWithTag:i];
    int myInt = [[myDict objectForKey:@"block%.3istored"] intValue];
        NSLog (@"value of i %d", i);
        NSLog (@"myInt %d", myInt);
    if (myInt == 1) imageV.hidden = FALSE;
    }
}

}

ただし、objectForKeyを具体的に@ "block003stored"に変更すると、次のようになります。

    int myInt = [[myDict objectForKey:@"block003stored"] intValue];

正しい値の1が返されます。001、002、003などの代わりに%.3iを使用すると、コードが機能しない理由がわかりません。

4

2 に答える 2

1

ループ内のコードは、リテラル文字列として@ "block%.3istored"を使用しています。i文字列を変数でフォーマットするために書いたものには何もありません。stringWithFormat:キーを動的に構築する方法としてNSStringを見てください。

于 2012-11-30T13:07:30.877 に答える
1

別の行で試してください:

NSString *indexStr = [NSString stringWithFormat:@"block%.3dstored", i]; Then use the objectForKey:indexStr];

存在しなかった「block%.3istored」のキーを持つオブジェクトを取得するように辞書に要求していました。そこにiを入れるには、フォーマットを適用する必要があります。

于 2012-11-30T21:04:27.010 に答える