问题标签 [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.
ios - NSNumberFormatter 即使没有小数点也保留小数点分隔符
我有一个 UILabel 及其格式化程序:
这样我的 formattedString 返回 12
如果我想在没有小数的情况下保留逗号怎么办?这样我的 UIlabel 会打印出“12.”?
objective-c - 如何计算包含格式化十进制数的字符串的长度
我正在尝试计算NSString
从十进制数字格式化的字符数,并进行本地化。
使用下面的代码,我在英国本地化中正确获得了长度。但是如果我尝试使用法语区域格式,它会搞砸,其中千位分隔符是一个空格,小数点是一个逗号。
任何人都可以就正确的方法提出建议吗?
这是应该给我字符数的位:
这是解格式化程序:
macos - 带有 NSFormatter 的 NSTextField 会导致连续绑定中断
我有一个必须是唯一的文本字段,所以我添加了我的自定义NSFormatter
(见下文)
正如您在屏幕截图中看到的那样,格式化程序可以工作,但是我正在使用的连续绑定已损坏,因此例如绑定的文本不再实时更新。
我在这里找到了可能的原因,但我不知道如何解决这个问题并重新启用连续绑定:
...
- 12.如果视图附加了一个 NSFormatter,则该值由 NSFormatter 实例格式化。继续执行步骤 17。
- ...
- 17.更新的值显示在用户界面中。
所以看起来它是故意跳过我们想要的步骤。这很烦人。我尝试了 NSValueTransformer,但将其添加到可编辑的 NSTextField 使其不可编辑。
我的格式化程序
工作验证
请注意,列表项的标题应使用我在文本字段中输入的文本进行更新。
objective-c - 当格式化程序更改其格式时如何刷新 NSTextField?
我有几个 NSTextFields 使用绑定来获取它们的值。每个文本字段都有一个自定义的 NSFormatter 附加,用于格式化值。
现在我想改变这个 NSFormatter 的格式,我通过在 NSUserDefaults 中设置一个键来做到这一点。格式化程序监听 NSUserDefaultsDidChangeNotification。只要支持绑定的值发生更改,这就会起作用。如果该值未更改,则 NSTextField 不会更新。
如果格式化程序更改了格式,刷新 NSTextField 的正确方法是什么?
在最好的情况下,我既不需要引用 NSTextField 也不需要引用 NSFormatter。在整个应用程序中,有各种温度标签都应该转换它们的格式。我希望能够从 NSFormatter 内部启动“绑定刷新”。也许我错过了 NSNotification?
我尝试发送willChangeValueForKey:
和didChangeValueForKey:
KVO 通知,但没有奏效。
现在我正在使用一种相当老套的方式,我只是稍微改变一下这个值。
正如您可以想象的那样,这两种方式都不是一个好主意。它现在可以工作,因为我只是在显示值。但是我阻止了未来将 KVO 用于依赖数据完整性的事情的选项,例如温度历史,所以我想避免发送虚假的值更改事件。
objective-c - 从不同线程访问只读对象的思考
根据我之前在 SO 中的讨论(请参阅对可以多次使用的对象的并发性的怀疑,如格式化程序),在这里我提出了一个更理论的问题,关于在应用程序生命周期内创建一次(并且从未修改过的对象,因此是只读的)并且可以从不同的线程访问它们。一个简单的用例是核心数据。格式化程序可用于不同的线程(主线程、导入线程等)。
NSFormatter
例如,创建 s 的成本非常高。基于此,它们可以创建一次然后重复使用。可以遵循的典型模式(也由 NSFormatter 文章中的@mattt 突出显示)如下。
即使我确定这是一种非常好的方法(创建了一种只读/不可变对象),格式化程序也不是线程安全的,因此以线程安全的方式使用它们可能是危险的。当作者注意到可能发生崩溃的不同线程中使用时,我发现了关于 NSDateFormatter 崩溃中的论点的讨论。
NSDateFormatters 不是线程安全的;有一个后台线程试图同时使用相同的格式化程序(因此是随机性的)。
那么,从不同线程访问格式化程序可能会出现什么问题?有什么安全的模式可以遵循吗?
objective-c - NSNumberFormatter:从 25.0 之类的字符串开始显示零作为最后一个数字
我有一个代表浮点数的字符串,例如2400.0
. 我想将其格式化为数字(2,400.0
),我需要在数字符号后保留零。
我NSLog
需要的result
时候2,400
2,400.0
如何获得正确的字符串?
ios - NSDate 单独格式化
我正在使用 NSDateFormatter 来格式化 NSDate 变量,如下所示:
我只想为一年的第一天提供一种独特的格式(setDateFormat:@"dd/MM/yyyy")。
可能吗?
提前致谢。
cocoa - 在 NSPopover 中使用 NSNumberFormatter
有没有办法让 NSNumberFormatter(或可能是任何其他 NSFormatter)在 NSPopover 中工作?
popover 中 NSTextField 的值绑定到 NSViewController 的代表对象。当在字段中输入无效数字(例如,“asdf”)时,会在包含显示弹出窗口的 NSView 的 NSWindow 中显示一个说明该值无效的工作表。
单击“确定”后,您将获得以下回溯:
objc_msgSend 中崩溃时的寄存器是:
我猜这是因为显示工作表后瞬态弹出窗口的窗口消失了,当前编辑器和任何可以响应选择器的对象也是如此。
将弹出框行为设置为 NSPopoverBehaviorSemitransient 会有所帮助,但如果弹出框因文本字段中的无效值而被解除,则仍会引发异常。
在这一点上,为了避免这个问题,我所能想到的就是手动验证数值。呸。
更新 1
正如 Brian Webster 在下面发现的,这是 AppKit 的一个基本问题。
由于我的验证需求非常简单(只是正整数),因此解决方法是在 KVC 对象中进行手动验证,该对象用作 NSPopover 显示的 NSViewController 中的代表对象。由于 NSTextField确实想使用字符串值,因此使用 -valueForKey: 和 -setValue:forKey: 来转换标量值。当您为文本字段中的绑定值打开“立即验证”时,只要文本字段发生更改,就会调用验证方法。
(在你问之前,一个 NSValueTransformer 不能做这个工作,因为它不参与验证过程。它只会在填充字段或保存更改时被调用。一旦用户输入了一些无效的内容,我就想要反馈数据——就像 NSFormatter 一样。)
这是我所做的要点:
现在我需要洗个澡。
更新 2
感谢@PixelCutCompany 关于他们如何在 PaintCode 应用程序中做事的一些有用提示:
https://twitter.com/PixelCutCompany/status/441695942774104064 https://twitter.com/PixelCutCompany/status/441696198140125184
我想出了这个:
基本上,您可以通过始终提供有效值来避免工作表或对话框出现问题。上面的代码在分配默认值时会考虑最小值和最大值。子类还考虑了 nil 或空字符串以及钳位值。
这让我感觉不那么脏。
swift - 如何在 Swift 中使用 println 格式化数字
在 Objective-C 中注销浮点数时,您可以执行以下操作以将输出限制为小数点后 2 位:
但是你如何在 Swift 中做到这一点?以及如何println
在 Swift 中转义其他角色?
这是一个常规的 Swiftprintln
语句:
那么如何限制小数位呢?
另外,你如何逃避双引号println
?
ios - 只有一台设备和 NSDate 的奇怪行为
经过数周的工作,我终于在昨天发布了我的应用程序 :-) 20 部 iPhone 下载了我的应用程序,只有一部出现了问题。我绝对无法调试它,因为我无法访问有问题的设备。
首先,我得到了 json(即使在设备上也能很好地解码),然后我提取了一个日期:
我想知道这个日期是什么时候,所以我使用了这个函数:
这导致此代码:
我的问题是,仅对于一台设备,日期计算为“4932 天前”,而对于所有其他设备,它运行良好。这是日期:date: "2014-07-04 13:38:01"
您对可能出现的问题有任何线索吗?
提前谢谢了...
编辑:4932 天前是 2001 年 1 月 1 日。苹果参考日期。