問題タブ [nsformatter]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
165 参照

ios - NSNumberFormatter は、小数点が存在しない場合でも小数点を保持します

私は UILabel とそのフォーマッタを持っています:

私のformattedStringが12を返すように

小数点がないときにコンマを保持したい場合はどうすればよいですか? 私のUIlabelが「12」を出力するように?

0 投票する
1 に答える
479 参照

macos - NSFormatter を使用した NSTextField により、連続バインディングが壊れる

一意である必要があるテキストフィールドがあるため、カスタムを追加しましたNSFormatter(以下を参照)

スクリーンショットでわかるように、フォーマッタは機能しますが、私が使用している連続バインディングが壊れているため、たとえば、バインドされたテキストがリアルタイムで更新されなくなりました。

ここで考えられる原因を見つけましたが、この問題を回避して継続バインディングを再度有効にする方法がわかりません。

...

  • 12.ビューに NSFormatter が関連付けられている場合、値は NSFormatter インスタンスによってフォーマットされます。手順 17 に進みます。
  • ...
  • 17.更新された値がユーザー インターフェイスに表示されます。

そのため、必要な手順を意図的にスキップしているように見えます。これは非常に迷惑です。NSValueTransformer を試しましたが、それを編集可能な NSTextField に追加すると、編集できなくなります。

私のフォーマッター

動作確認

ここに画像の説明を入力

リスト アイテムのタイトルは、テキスト フィールドに入力したテキストで更新される必要があることに注意してください。

0 投票する
2 に答える
294 参照

objective-c - 異なるスレッドから読み取り専用オブジェクトにアクセスする際の考え方

SO で行った以前の議論に基づいて (フォーマッタのように複数回使用できるオブジェクトとの並行性に関する疑問を参照)、ここでは、アプリケーションの有効期間中に一度だけ作成される (そして決して変更されない) オブジェクトについて、より理論的な質問をしています。したがって、読み取り専用) であり、異なるスレッドからアクセスできます。単純な使用例は、Core Data のものです。フォーマッタは、さまざまなスレッド (メイン スレッド、インポート スレッドなど) で使用できます。

NSFormatterたとえば、作成には非常にコストがかかります。それに基づいて、一度作成してから再利用できます。従うことができる典型的なパターンは次のとおりです (NSFormatter の記事で@matttによって強調されています)。

従うべき非常に良いアプローチであると確信していても (一種の読み取り専用/不変オブジェクトが作成されます)、フォーマッターはスレッドセーフではないため、スレッドセーフな方法で使用することは危険です。作成者がクラッシュが発生する可能性があることに気付いた別のスレッドから使​​用すると、 NSDateFormatter がクラッシュするの引数に関する議論を見つけました。

NSDateFormatters はスレッドセーフではありません。同時に同じフォーマッタを使用しようとするバックグラウンド スレッドがありました (したがってランダム性)。

では、異なるスレッドからフォーマッタにアクセスする際の問題は何でしょうか? 従うべき安全なパターンはありますか?

0 投票する
4 に答える
964 参照

objective-c - NSNumberFormatter: 25.0 のような文字列から始まる最後の桁としてゼロを表示する

たとえば、フロートを表す文字列があります2400.0。数字 ( ) としてフォーマットしたいのです2,400.0が、数字記号の後にゼロを保持する必要があります。

NSLogは、私が必要な間resultです2,4002,400.0

正しい文字列を取得するにはどうすればよいですか?

0 投票する
3 に答える
2610 参照

cocoa - NSPopover で NSNumberFormatter を使用する

NSNumberFormatter (またはおそらく他の NSFormatter) を NSPopover で動作させる方法はありますか?

ポップオーバーの NSTextField の値は、NSViewController の presentedObject にバインドされます。フィールドに無効な数値 (「asdf」など) が入力されると、ポップオーバーを表示した NSView を含む NSWindow に値が無効であることを示すシートが表示されます。

[OK] をクリックするとすぐに、次のバックトレースが表示されます。

クラッシュ時の objc_msgSend のレジスタは次のとおりです。

これは、シートが表示された後に一時的なポップオーバーのウィンドウが消えたためであり、現在のエディターとセレクターに応答できるオブジェクトも消えたためだと思います。

ポップオーバーの動作を NSPopoverBehaviorSemitransient に設定すると多少は効果がありますが、テキスト フィールドに無効な値が入力されてポップオーバーが閉じられた場合でも例外がスローされます。

この時点で、この問題を回避するために考えられるのは、数値を手動で検証することだけです。うん。

更新 1

Brian Webster が以下で発見したように、これは AppKit の根本的な問題です。

私の検証のニーズは非常に単純 (正の整数のみ) だったので、回避策は、NSPopover によって表示される NSViewController でpresentedObject として使用される KVC オブジェクトで手動検証を行うことでした。NSTextFieldは実際には文字列値を使用する必要があるため、-valueForKey: と -setValue:forKey: を使用してスカラー値を変換します。テキスト フィールドのバインドされた値に対して [すぐに検証する] をオンにすると、テキスト フィールドが変更されるたびに検証メソッドが呼び出されます。

(質問する前に、NSValueTransformer は検証プロセスに関与していないため、この作業を実行できません。フィールドにデータが入力されるか、変更が保存されたときにのみ呼び出されます。ユーザーが無効なものを入力したらすぐにフィードバックが必要でした。 data -- NSFormatter が行うように。)

これが私がやったことの要点です:

今、私はシャワーを浴びる必要があります。

更新 2

@PixelCutCompany からの、PaintCode アプリでの処理方法に関するいくつかの役立つヒントに感謝します。

https://twitter.com/PixelCutCompany/status/441695942774104064 https://twitter.com/PixelCutCompany/status/441696198140125184

私はこれを思いついた:

基本的に、常に有効な値を指定することで、シートまたはダイアログの問題を回避できます。上記のコードは、デフォルト値を割り当てるときに最小値と最大値を考慮します。サブクラスは、クランプ値だけでなく、nil または空の文字列も考慮します。

これにより、汚れをあまり感じなくなります。

0 投票する
4 に答える
52036 参照

swift - Swiftでprintlnを使用して数値をフォーマットする方法

Objective-C で float をログアウトする場合、次のようにして、出力を小数点以下 2 桁に制限できます。

しかし、Swift でこれを行うにはどうすればよいでしょうか。printlnまた、Swiftで他のキャラクターをどのようにエスケープしますか?

通常の Swiftprintlnステートメントは次のとおりです。

では、小数点以下の桁数をどのように制限しますか?

また、二重引用符をどのようにエスケープしますprintlnか?

0 投票する
1 に答える
80 参照

ios - 1 つのデバイスと NSDate のみでの奇妙な動作

数週間の作業の後、昨日ついにアプリケーションをリリースしました :-) 20 の iPhone が私のアプリケーションをダウンロードしましたが、問題が発生したのは 1 つだけです。問題のあるデバイスにアクセスできないため、デバッグする方法がまったくありません。

まず最初に、json を取得し (デバイス上でも適切にデコードされます)、次に日付を抽出します。

この日付がいつだったのか知りたいので、次の関数を使用します。

このコードにつながる:

私の問題は、1 つのデバイスのみで日付が「4932 日前」として計算され、他のすべてのデバイスでは正常に機能していることです。日付は次のとおりです。date: "2014-07-04 13:38:01"

何が間違っている可能性があるかについての手がかりはありますか?

よろしくお願いします...

編集: 4932 日前は 2001 年の最初の 1 月でした。リンゴの基準日。