2009-08-25 8 views
1

Ich habe ein seltsames Problem mit variablen Werten. Dies ist der Code (es ist Teil einer Klasse-Methode):iphone nslog korrumpierte Daten

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]; 

ich den Debugger mit dem objc_exception_throw Breakpoint verwenden. Die Eingabe von objectAtIndex in dort zeigt als Wert = 13760640. Das cards Attribut von appData ist ein NSArray und es hat eindeutig nicht zehn Millionen + Elemente, so dass ich einen out of bounds Fehler bekommen. Ich habe versucht, mit (int)cardIndex ohne bessere Ergebnisse zu werfen. Sonderbare Sache ist ein ähnlicher Code in einer anderen Klasse funktioniert gut.

Dies sind einige Daten, die ich in meiner App verwenden möchte, also habe ich eine Model-Klasse, die in der AppDelegate als theData initialisiert wird und dann von verschiedenen ViewControllern zugegriffen wird. Dieser Fehler tritt nach einem erfolgreichen Zugriff auf einen anderen ViewController auf (der auch beibehalten/freigegeben wird).

Jede Hilfe wird geschätzt.

Antwort

0

Verwenden Sie [cardIndex unsignedIntValue] für die objectAtIndex: Linie.

Sie können objectAtIndex: keinen Zeiger angeben, da eine Ganzzahl ohne Vorzeichen erwartet wird.

Zum Beispiel:

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

EDIT:

Es klingt wie ein cardIndexint ist aber irgendwo entlang der Linien es als NSNumber Instanz festgelegt wird. Als Hack verwenden Sie [(id)cardIndex unsignedIntValue]. Wenn das funktioniert, bedeutet das, dass Sie den falschen Typ für cardIndex verwenden (es sollte NSNumber sein, nicht int).

+0

Danke, Alter! Obwohl ich eine "ungültige Empfängerart int" Warnung erhalte. – mga

+0

Versucht Casting als (NSUInteger) und immer noch die Warnung erhalten. Alles andere funktioniert aber gut ... Ich mag keine Warnungen. – mga

+0

Direkt dran! Konvertiert alle notwendigen Verweise auf NSNumber. Vielen Dank! – mga