Table View を備えたシンプルな Cocoa アプリがあります。テーブルの各セルは、浮動小数点値を表します。フロートは、5 つのフロート プロパティを持つオブジェクトに格納されます。その名前は、テーブル ビューの列に設定した識別子と一致します。
格納された浮動小数点値が編集可能になるようにすべてを接続することができました。問題の数値がたまたま 1,000 以上の場合を除いて、すべてうまく機能します。この場合、番号を入力した後、カンマでフォーマットされたテーブル ビューに戻ります。
これまでのところ、コンマを含む数値を入力した場合を除いて、コンマの後のすべてが float 変換で失われます。
たとえば、次のようになります。
- 45.0 が 45 になる
- 999.9 が 999.9 になる
- 0 は 0.0 になります (小数点がゼロとして表示される理由がわかりません)
- 1000 が 1,000 になる
- 1,000 が 1 になる
- 2,312 が 2 になる
したがって、問題は最後の 3 つの例にあります。1000 以上の数字にはカンマが自動的に挿入されますが、カンマを入力すると正しく解釈されません。
コードで float 変換を明示的に行っているわけではありません。プロパティで setValueForKey を呼び出すとバックグラウンドで処理され、valueForKey を呼び出すと文字列変換が行われます。コード内で ID が渡されます。
私のデータコントローラーの関連コードは次のとおりです。
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
TCPointGroup *pg = [points objectAtIndex:row];
NSString *ident = [tableColumn identifier];
return [pg valueForKey:ident];
}
- (void)tableView:(NSTableView *)tableView setObjectValue:(id)object forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row {
TCPointGroup *pg = [points objectAtIndex:row];
NSString *ident = [tableColumn identifier];
[pg setValue:object forKey:ident];
}
そして、浮動小数点値を保持するオブジェクトの定義は次のとおりです。
@interface TCPointGroup : NSObject {
}
@property float pt_Xw;
@property float pt_Yw;
@property float pt_Zw;
@property float pt_xd;
@property float pt_yd;
+ (id)newWithArray:(NSArray*)array;
- (id)initWithArray:(NSArray*)array;
@end
フロートから文字列への変換によってコンマが挿入されるのは奇妙に思えますが、実行中の文字列からフロートへの変換では正しく理解されません。
期待どおりに動作させる方法について何か提案はありますか?