Xcode 8にアップグレードした後、GM今日、NSLogがログメッセージ全体をコンソールに出力していないことに気付きました。これは、次のような多くの情報をダウンロードするAPIに対して作業する場合に特に顕著です。 a REST APIはデータベースからすべての製品をダウンロードします。最初の製品の最初の30個のキーのみが表示され、残りの情報はクリップされます...
違いがあれば、配列と辞書を印刷しています。
NSDictionary *allProducts = responseFromAPI;
NSLog(@"All products:%@", allProducts);
他の誰かがこれに気づきましたか?そして、誰かがこれを修正する方法を知っていますか?
@Lionが彼のコメントで説明しているように、最も簡単な方法は、代わりにprintfを使用することです。 NSLogとまったく同じようには機能しませんが、必要なものが表示されます。
NSDictionary *allProducts = responseFromAPI;
NSString * string = [NSString stringWithFormat: @"%@", allProducts];
printf("%s", [string UTF8String]);
以下:
NSDictionary *allProducts = responseFromAPI;
printf("%s", [NSString stringWithFormat: @"%@", allProducts].UTF8String);
ヒントは、printf形式の最初または最後に「\ n」を配置して、出力を分離し、すべてを1行にまとめないようにすることです。このようなもの:
printf("%s\n", string.UTF8String);
代わりに、毎回printfを作成したくない場合は、#defineを使用してコードを次のようなprintfにリダイレクトできます(@xfdaiのコード)。
#define NSLog(FORMAT, ...) printf("%s\n", [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
うまくいけば、これはAppleのバグであり、すぐに修正され、それまではこれを使用できます。
この方法を使用できます。 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);
}
}