0

MySQLデータベース サーバーからのレコードを処理する Mac OS X アプリケーションに取り組んでいます。MySQL C APIを使用してデータをフェッチし、結果のNSMutableArrayを作成します。フェッチされた各レコードは、 NSMutableArrayに追加されるNSDictionaryを作成します。

データベース サーバーから返された空の数値を処理する最善の方法は何ですか? nil はNSDictionaryに挿入できないため、 [NSNull null]を使用してNSNumberNULLとして「マーク」する関連オブジェクト、またはNSNumberのサブクラス化など、いくつかのソリューションを試しました。しかし、私が見つけた最も簡単な解決策は、次のように、0 を 0 で割った double 値を持つNSNumberを作成することでした。

// for each row in the MySQL result check the field type and create the ObjC value
...
case MYSQL_TYPE_DOUBLE: {
  if (row[col] == NULL) {   // row is the last fetched MYSQL_ROW
    [record setObject:[NSNumber numberWithDouble:0.0/0.0] forKey:columnNames[col]];
  } else {
    [record setObject:@(strtod(row[col], NULL)) forKey:columnNames[col]];
  }
  break;
}
...

これにより、NSDecimalNumber の notANumber プロパティに対する簡単なテストが可能になり、
NSNumberFormatter の notANumberSymbol を使用して UI で空の値をフォーマットすることもできます。

そのようにすることの欠点はありますか?

4

2 に答える 2

0

NaN 番号を別のものにします。

[NSDecimalNumber notANumber]

標準が正しいことを覚えていれば、ゼロによる除算は未定義の状態につながります。

しかし、これに加えて、大丈夫だと思います。

于 2013-08-14T07:35:13.717 に答える