NSArray элемент в NSString - PullRequest
       18

NSArray элемент в NSString

1 голос
/ 19 декабря 2009

В методе у меня следующий код:

NSString* tempString = (NSString*)arg;
NSArray* notificationDetails = [tempString componentsSeparatedByString:@"##"];
NSString* tempString1 = [notificationDetails objectAtIndex:2];
.
.
.
.
.
. 
NSLog(tempString1);

Когда я компилирую код, его компиляция без ошибок и предупреждений. Но во время работы (в режиме отладки с точками останова) происходит сбой в операторе NSLog. Проблема, с которой я сталкиваюсь, заключается в том, что я получаю сообщение «[messagesDetails objectAtIndex: 2];» Какое решение для этого.

Ответы [ 4 ]

6 голосов
/ 19 декабря 2009

Использование ...

NSLog(tempString1);

... опасно. Хотя похоже, что NSLog будет принимать любую строку в качестве единственного параметра, на самом деле определение действительной вызываемой функции дает понять, что первый параметр внутренне анализируется как строка формата.

void NSLogv (
   NSString *format,
   va_list args
);

Это означает, что любые символы в строке, имеющие формат, т. Е. "%", Будут обрабатываться как символы, а не как символы. Поэтому, если вы попытаетесь передать строку, «распродажа на 40%» NSLog будет искать аргументы и вылетать, когда не найдет их.

1 голос
/ 19 декабря 2009

Использование

NSLog(@"%@", tempString1);

0 голосов
/ 19 декабря 2009

Дополнительная возможность, в зависимости от длины многоточия: componentsSeparatedByString: возвращает автоматически выпущенный массив. Но я предполагаю, что недостаточно компонентов.

0 голосов
/ 19 декабря 2009

Сколько элементов содержит уведомлениеDetails? Используйте следующий код, чтобы узнать: NSLog (@ "% d elements", [messagesDetails count]);

Является ли arg строкой вообще? NSLog (@ "Класс аргумента% @", [класс аргумента]);

...