[__NSDate caseInsensitiveCompare:]:无法识别的选择器发送到实例

Posted

技术标签:

【中文标题】[__NSDate caseInsensitiveCompare:]:无法识别的选择器发送到实例【英文标题】:[__NSDate caseInsensitiveCompare:]: unrecognized selector sent to instance 【发布时间】:2014-02-27 09:47:10 【问题描述】:

我正在使用Magical Record .. 我正在使用NSFetchRequest 喜欢:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(due_at < %@) AND complete == 0",startDate];
        NSArray *taskArray = [Task MR_findAllSortedBy:@"due_at" ascending:NO withPredicate:predicate];

我已登录控制台,它是:

<NSFetchRequest: 0x16b239b0> (entity: Task; predicate: (due_at < CAST(415186806.000000, "NSDate") AND complete == 0); sortDescriptors: ((
    "(due_at, descending, caseInsensitiveCompare:)"
)); batch size: 20; type: NSManagedObjectResultType; )

这会导致我出现以下错误:

[__NSDate caseInsensitiveCompare:]: unrecognized selector sent to instance

我该如何解决这个问题..

【问题讨论】:

due_at的属性类型是什么?我的猜测是这是一个字符串,你需要将它设置为日期 排序描述符有问题,因为它看起来像是在尝试使用字符串排序,而不是数字排序。 是的,您正在使用 caseInsensitiveCompare: 进行排序 - 而 NSDate 只有 compare: 方法。 NSUUID 有同样的错误。谢谢@casedemora 的回答。 【参考方案1】:

这应该可以帮助您解决这个问题:

NSFetchRequest *request = [Task MR_requestAll];
NSSortDescriptor *sortByDueAtDate = [NSSortDescriptor sortDescriptorWithKey:@"due_at" ascending:NO selector:@selector(compare:)];
[request setSortDescriptors:@[sortByDueAtDate]];

NSArray *results = [Task MR_executeFetchRequest:request];
//continue on with results

【讨论】:

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

IOS--时间 NSDate,NSTimeInterval的一些转换

iOS 钥匙串:NSDate 与 NSString

目标 C:归档 NSDate 时遇到问题

无法将 NSDate 从 Parse 存储到 Core Data

从核心数据中提取 NSDate 并在 IOS 中显示它

NSdate(时区)中的问题日期时间显示过去 5 小时 30 分钟