NSSortDescriptor 和 [__NSCFNumberlocalizedStandardCompare:]:发送到实例的无法识别的选择器

Posted

技术标签:

【中文标题】NSSortDescriptor 和 [__NSCFNumberlocalizedStandardCompare:]:发送到实例的无法识别的选择器【英文标题】:NSSortDescriptor and [__NSCFNumber localizedStandardCompare:]: unrecognized selector sent to instance 【发布时间】:2015-11-24 20:11:39 【问题描述】:

我正在使用排序描述符对 NSManagedObject (CoreData) 的数组进行排序。

我有两个 Int16 值的排序描述符(今天添加了第二个)。

由于某种原因,当尝试使用添加的描述符对我的数组进行排序时,它会崩溃:

[__NSCFNumber localizedStandardCompare:]: unrecognized selector sent to instance
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber localizedStandardCompare:]: unrecognized selector sent to instance

我什至尝试更改我的数据模型(将属性添加为 Int16 并填充它),但每次尝试使用新添加的描述符时应用程序都会崩溃。

描述符很简单: let sortDescriptor4 = NSSortDescriptor(key: "the_int16_property", 升序: false, selector: "localizedStandardCompare:")

我很茫然。任何建议都会有所帮助。

谢谢!

【问题讨论】:

【参考方案1】:

localizedStandardCompare:NSString 的方法 “比较按 Finder 排序的字符串”。

numerical Core Data 属性(如“Int 16”)的键值编码使用 NSNumber 实例,并且该类不响应 localizedStandardCompare:.

只需使用默认的compare: 选择器:

NSSortDescriptor(key: "the_int16_property", ascending: false, selector: "compare:")
// Swift 2.2 or later:
NSSortDescriptor(key: "the_int16_property", ascending: false, selector: #selector(NSNumber.compare(_:)))

或者干脆

NSSortDescriptor(key: "the_int16_property", ascending: false)

【讨论】:

谢谢!这实际上是一个复制粘贴错误。甚至没有注意到它!

以上是关于NSSortDescriptor 和 [__NSCFNumberlocalizedStandardCompare:]:发送到实例的无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

MySQL主从复制

选择 UISegmentedControl 控件会导致 SIGABRT

第六十八篇OC_按照某一字段对数值进行排序

值 YpartialUnification 不是 scala.tools.nsc.Settings 的成员

NSFetchedResultsController,分组 UITableView、HeaderInSection 和 NSSortDescriptor

无法获取 cpu pod 指标,k8s-containerd-containerd-shim-runsc-v1-gvisor