нераспознанный селектор, отправленный экземпляру при попытке получить строковое значение - PullRequest
1 голос
/ 15 марта 2012

У меня есть NSMutablearray, который содержит NSArrays (каждый массив содержит значения int и String). Когда я пытаюсь получить и отобразить данные из первого массива: Это было нормально со значением int, оно отображалось правильно.

    NSLog(@"%i",[[[lesQuestions objectAtIndex:0] objectAtIndex:0] intValue]);

Но когда я пытаюсь отобразить строковое значение:

    NSLog(@"%@",[[[lesQuestions objectAtIndex:0] objectAtIndex:1] stringValue]);

Я получил исключение:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString stringValue]: unrecognized selector sent to instance

Я определенно уверен, что значение int является первым элементом (индекс 0), а значение String - вторым (индекс 1). Когда я регистрирую MutableArray, который содержит NSArrays, я получил значения правильно, так что проблема в ссылке на элемент, я думаю.

Ответы [ 2 ]

6 голосов
/ 15 марта 2012

Объект в вашем массиве уже является строкой NSString, поэтому вызов stringValue не требуется.NSString не реализует метод с именем stringValue, поэтому вы видите исключение.Просто сделайте это:

NSLog(@"%@",[[lesQuestions objectAtIndex:0] objectAtIndex:1]);

-intValue - это метод, реализованный NSNumber, чтобы получить целочисленный примитив из экземпляра NSNumber, и вы используете intValue правильно, если первый объект в массивеявляется NSNumber (или NSString, который также реализует -intValue).

Все это говорит, я не думаю, что это хорошая идея хранить экземпляры разных классов в одном массиве, как выделает.Возможно, вам лучше использовать NSDictionary, где каждое значение хранится с уникальным ключом, скажем, @"index" для числа и @"name" для строки.

1 голос
/ 15 марта 2012

NSLog, соответственно, способность стандартных объектов отображать себя сильнее, чем вы думаете.

 NSLog(@"%@",[[lesQuestions objectAtIndex:0] objectAtIndex:0]);
 NSLog(@"%@",[[lesQuestions objectAtIndex:0] objectAtIndex:1]);

Вы могли бы даже найти это полезным, если у вас нет действительно большого количества элементов массива:

 NSLog(@"%@",[lesQuestions objectAtIndex:0]);

или

 NSLog(@"%@",lesQuestions);

Попробуйте!

...