2012年8月31日星期五

[Titanium]NSLogによるdebug messageが出力しない問題


昨日自分が作ったTitanium Moduleをテストする時、一部のログが出ない問題が大変だった。一部新規したclassに書いたNSLogがちゃんと出てきたが、linkしたlibraryとして使うsource fileに書いたNSLogが無反応だった。debug flagが漏れたと思ったが、checkしたらちゃんと付いている。
仕方ないTitaniumのsourceを分析する道を選ぶしかない、それて原因を見つけた。簡単に言うとmacroの責だ。
現象と原因は以下のように:

  1. TiProxy或はTiUIViewを承継したclassが問題なく、全部のNSLogを出力した。しかし、NSLogに出力したmessageが<Warning>として出力するはずだったが、<Notice>として出力した。原因はTitaniumの方NSLogをmacroで全部書き直した。Noticeはprintfを使った結果なんだ。
  2. macroを書いたのはTiBase.hだ。このheader fileをimportすれば、ログが全部出る。一つ一つのfileにimportを追加するのは面倒なので、prefix.pchにflagを付けって一気にimportする。
    #ifdef DEBUG
        import "TiBase.h" 
    #endif
    
これですべてのログが出力されるはず。

没有评论:

发表评论