【问题标题】:[__NSDate caseInsensitiveCompare:]: unrecognized selector sent to instance[__NSDate caseInsensitiveCompare:]:无法识别的选择器发送到实例
【发布时间】: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 的回答。

标签: nsdate nspredicate nsfetchrequest case-insensitive magicalrecord


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多