Предупреждение Objective-C
-
07-07-2019 - |
Вопрос
Я довольно новичок в objective-c, и у меня возникли проблемы с пониманием предупреждающего сообщения для следующего блока кода:
void PrintPathInfo() {
NSString *path = @"~";
NSString *message = @"My home folder is: ";
NSLog([message stringByAppendingString: [path stringByExpandingTildeInPath]]);
}
Это предупреждающее сообщение, которое я получаю для последней строки (вызов NSLog):
warning: format not a string literal and no format arguments
Может кто-нибудь, пожалуйста, уточнить?Является ли это предупреждающим сообщением, о котором я должен беспокоиться?
Спасибо.
Решение
Ваш код должен работать просто отлично, но может неправильно себя вести, если в передаваемой строке есть какие-либо символы форматирования '%' - это может сбить с толку NSLog.Например, попробуйте заменить это в своем коде:
NSString *message = @"My home %folder is: ";
NSLog неправильно истолкует это '%f'.
Вы можете избежать предупреждения (и опасности), используя строковый литерал с форматированием и передачей ваших строк, например:
NSLog(@"%@%@", message, [path stringByExpandingTildeInPath]);
Вы также можете проверить эту ссылку:
http://www.cocoabuilder.com/archive/message/cocoa/2009/8/29/243819
Удачи!
Другие советы
Если вы хотите записать выходные данные в nslog, вам нужно что-то вроде этого:
NSLog(@"My home folder is %@",[path stringByExpandingTildeInPath]);