XCodeの64Bit対応

SmultronへのNKFCocoaの組み込み時に発見した「?」な現象。

エンコーディングリストのポップアップを作成する処理で、

NSArray      *encodingsArray = [SMLBasic fetchAll:@ "EncodingSortKeyName"];
NSEnumerator *enumerator     = [encodingsArray objectEnumerator];
id            enc;
while ((enc = [enumerator nextObject]) != nil)
  {
    if ([[enc valueForKey : @ "active"] boolValue] == YES)
      {
        [popup addItemWithTitle :[enc valueForKey : @ "name"]];
        [[popup lastItem] setTag :
          [[enc valueForKey : @ "encoding"] unsignedIntegerValue]];
      }
  }

というコードがあるんですが、このうちポップアップにsetTagするときに最初は、

[[popup lastItem] setTag :[[enc valueForKey : @ "encoding"] unsignedIntValue]];

としていたのですが、これだとポップアップリストの一部(決まってUTF-8/Shift_JIS(Windows,Dos)がグレイ表示になって有効になりません。

試行錯誤の結果unsignedIntegerValueを使うことで解決したのですが、

- (NSUInteger)unsignedIntegerValue
- (unsigned int)unsignedIntValue

と両者の違いはlong/intの違いだけなのでNSStringEncodingの値を使っているかぎり情報落ちは発生しないはずでなんとも解せない。デバグ中にsetTagをコメントアウトして確認したのでこの部分に何か問題があったのは間違いのないことなんですが...

そして、もっと奇怪なことにこの現象もう再現しないんです。つまり、一度unsignedIntegerValue に変更した後はunsignedIntValueでも望み通りの結果になるんですよ。落ち着いたら調査しようなどと思っていたのですがなんとも消化不良。もう一度、最初からプロジェクトを作り直したりしたのですがそれでも再現せず。なにか僕の修正手順の中になにか合ったのだろうと思うのですが何か気持ちが悪いですね。それとも、v10.5で登場した64-Bit対応アプリ開発あたりなにかバグでも潜んでいるのでしょうかね?(Xcode3.1.2 のお話です)

この記事のトラックバックURL:

http://hippos-lab.com/blog/trackback/302

Comments