NSLog の代わりに使用している場所でクラッシュが発生しています。
(私は主にファイルと画面上のテキストフィールドに書き込むために置き換えを使用していますが、今のところコンソールに出力するだけにしています)
次の 2 つの実装を試しました (ちなみに、元の作成者に感謝します) : http://www.platinumball.net/blog/2009/07/18/nslog-sucks/ com/index.php/2009/03/23/114/
どちらも私のコードのいくつかの場所で機能しますが、特定の場所からそれらを呼び出すと、クラッシュが発生するようです。多くの場合、スタック トレースの上部に CFStringAppendFormatCore がありますが、常にではありません (最新の当時は「0 flockfile」でした)。クラッシュは常に、アセンブリ内の CMPL または JMP 付近で発生するようです。
私はこのようにそれを使用するつもりです:
+ (void)saveProfile:(NSString *)reason {
DebugLog(@"Saved profile: %@", reason);
}
しかし、次のことを行うとクラッシュすることさえあります。
+ (void)saveProfile:(NSString *)reason {
DebugLog(@"Saved profile.");
}
クラッシュが発生すると、常に NSString で Summary Unavailable が発生するように見えますが、この別のログの代わりに NSLog を配置すると、NSLog は引き続き機能します。私は何週間もこれらの場所に NSLog を置いていて、コンソールへのプロファイルの保存を常にログアウトしていましたが、それを置き換えようとしたので、このクラッシュが発生しました。
すべての NSLog を置き換えましたが、ほとんどすべて正常に動作しています。パターンを見つけようとしていますが、クラッシュするのは常にクラスレベルのメソッドである可能性があるようです。私が知る限り、私は自分の Profile クラスで特別なことを何もしていません。これは NSObject を派生させ、クラス メソッドのみを持ちます。
私は元々、このログ機能のインポートを Prefix PCH ファイルの最後のものとして持っていましたが、それが問題の原因ではないかと思ったので、この機能を使用するすべてのファイルにヘッダーをインポートするようにしましたが、PCH にはありません。 .
私が試したもう 1 つのことは、(NSString *) を最初の引数として id に置き換えることです。これは、NSString が予想されるときに NSString 以外のものを渡すことに関する CFStringAppendFormatCore の投稿を読んだためです。[theNsObject の説明] を介してログに記録されていると思われる追加の引数に NSObject を渡すことがあるからです。しかし、私のコードを上記の 2 番目の例に減らしても、形式はなく、文字列リテラルのみであり、クラッシュは依然として発生します。
最後にもう 1 つ - これは iOS 6 SDK と Xcode 4.5.2 を搭載した iPhone 6.0 シミュレーターで実行されています。
何かご意見は?
ありがとう!