Xcode 8 Не отображает весь вывод NSLog
После обновления до Xcode 8 GM сегодня я заметил, что NSLog не печатает на консоли все сообщения журнала. Это особенно заметно при работе с API, который загружает много информации, например, REST API загружает все продукты из базы данных, он отображает только первые 30 ключей на первом продукте, остальная информация обрезается...
Я печатаю массивы и словари, если это имеет значение.
NSDictionary *allProducts = responseFromAPI;
NSLog(@"All products:%@", allProducts);
Кто-нибудь еще заметил это? И кто-нибудь знает, как это исправить?
Ответы
Ответ 1
Как поясняет @Lion в своем комментарии, самым простым способом является использование printf. Он не работает точно так же, как NSLog, но показывает, что вы хотите.
NSDictionary *allProducts = responseFromAPI;
NSString * string = [NSString stringWithFormat: @"%@", allProducts];
printf("%s", [string UTF8String]);
или короче:
NSDictionary *allProducts = responseFromAPI;
printf("%s", [NSString stringWithFormat: @"%@", allProducts].UTF8String);
Совет должен поместить "\n" в начале или в конце формата printf, чтобы он отделял выходы и не помещал все в одну строку. Что-то вроде этого:
printf("%s\n", string.UTF8String);
Если вам не нравится писать printf, а каждый раз, когда вы можете использовать #define для перенаправления кода на printf, как это (код из @xfdai):
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
Надеюсь, это просто ошибка от Apple, которая скоро будет исправлена, до тех пор мы можем использовать это.
Ответ 2
Вы можете использовать этот метод. Разделить каждые 800 символов. Или может быть установлен. NSLOG
Я думаю, урезать каждые 1000 символов. Если строка меньше 800 будет использовать простой NSLOG
. Это полезно для длинных строк Json и использует консоль. printf
использует окно отладки Xcode, а не консоль.
-(void) JSLog:(NSString*)logString{
int stepLog = 800;
NSInteger strLen = [@([logString length]) integerValue];
NSInteger countInt = strLen / stepLog;
if (strLen > stepLog) {
for (int i=1; i <= countInt; i++) {
NSString *character = [logString substringWithRange:NSMakeRange((i*stepLog)-stepLog, stepLog)];
NSLog(@"%@", character);
}
NSString *character = [logString substringWithRange:NSMakeRange((countInt*stepLog), strLen-(countInt*stepLog))];
NSLog(@"%@", character);
} else {
NSLog(@"%@", logString);
}
}