iphone nslog поврежденные данные - PullRequest
       10

iphone nslog поврежденные данные

1 голос
/ 25 августа 2009

У меня странная проблема со значениями переменных. Это код (это часть метода класса):

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. Атрибут cards appData - это NSArray, и он явно не содержит более десяти миллионов элементов, поэтому я получаю ошибку выхода за границы. Я пробовал кастовать с (int)cardIndex без лучшего результата. Странно то, что похожий код в каком-то другом классе работает нормально.

Это некоторые данные, которые я хочу использовать в своем приложении, поэтому у меня есть класс Model, который инициализируется в AppDelegate как theData, а затем принимается различными ViewControllers. Эта ошибка появляется после одного успешного доступа к другому ViewController (который также сохраняет / освобождает).

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 25 августа 2009

Используйте [cardIndex unsignedIntValue] для строки objectAtIndex:.

Вы не можете дать objectAtIndex: указатель, потому что он ожидает целое число без знака.

Например:

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

EDIT:

Звучит так, будто cardIndex - это int, но где-то вдоль линий он устанавливается как экземпляр NSNumber. В качестве хака используйте [(id)cardIndex unsignedIntValue]. Если это работает, то это означает, что вы используете неправильный тип для cardIndex (это должен быть NSNumber, а не int).

...