MySQLデータベース サーバーからのレコードを処理する Mac OS X アプリケーションに取り組んでいます。MySQL C APIを使用してデータをフェッチし、結果のNSMutableArrayを作成します。フェッチされた各レコードは、 NSMutableArrayに追加されるNSDictionaryを作成します。
データベース サーバーから返された空の数値を処理する最善の方法は何ですか? nil はNSDictionaryに挿入できないため、 [NSNull null]を使用してNSNumberをNULLとして「マーク」する関連オブジェクト、または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 で空の値をフォーマットすることもできます。
そのようにすることの欠点はありますか?