1

変数値に奇妙な問題があります。これはコードです (クラスメソッドの一部です):

MyAppDelegate *pDelegate = [[UIApplication sharedApplication] delegate];
SomeDictionaryData *appData = [pDelegate.theData retain];
NSLog(@"my instance var: %@",cardIndex); // outputs "my instance var: 4"
NSDictionary *currentCard = [[NSDictionary alloc] initWithDictionary:[appData.cards objectAtIndex:cardIndex]];;
// the above line breaks the app
[currentCard release];
[appData release];

objc_exception_throwブレークポイントでデバッガを使用しています。そこで受け取った入力は、objectAtIndex値 = 13760640 として表示されます。appData のcards属性は でNSArrayあり、明らかに 1000 万以上のアイテムがないため、範囲外のエラーが発生します。キャストを試みました(int)cardIndexが、より良い結果は得られませんでした。奇妙なことは、他のクラスの同様のコードが正常に機能することです。

これは、アプリ全体で使用したいデータであるため、AppDelegate で初期化され、theData別の ViewController によってアクセスされる Model クラスがあります。このエラーは、他のViewControllerへのアクセスが1回成功した後に表示されます(これも保持/解放します)。

どんな助けでも大歓迎です。

4

1 に答える 1

0

[cardIndex unsignedIntValue]ラインに使用objectAtIndex:

objectAtIndex:符号なし整数が必要なため、ポインターを指定することはできません。

例えば:

NSDictionary *currentCard = [[NSDictionary alloc] initWithDictionary:[appData.cards objectAtIndex:[cardIndex unsignedIntValue]]];

編集:

のように聞こえますcardIndexint、どこかでNSNumberインスタンスとして設定されています。ハックとして、使用します[(id)cardIndex unsignedIntValue]。これが機能する場合は、間違ったタイプを使用していることを意味しますcardIndex( ではなく NSNumber である必要がありますint)。

于 2009-08-25T02:09:22.067 に答える