神奇的记录排序错误

Posted

技术标签:

【中文标题】神奇的记录排序错误【英文标题】:Magical Record sorting error 【发布时间】:2013-05-10 15:58:44 【问题描述】:

我创建了一堆 Group Entities:

for (NSString *groupID in result) 
    group = [Group MR_createInContext:context];

    group.groupID = [NSNumber numberWithInteger:[groupID integerValue]];

然后我想按排序列出它们:

NSArray *groups = [Group MR_findAllSortedBy:@"groupID" ascending:TRUE inContext:context];

for (Group *group in groups) 
    DLog(@"group.groupID: %@", group.groupID);
    DLog(@"group: %@", group);

产生错误:

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

我的群组Entity是自动生成的:

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>

@interface Group : NSManagedObject

@property (nonatomic, retain) NSNumber * groupID;

@end

@interface Group (CoreDataGeneratedAccessors)

@end

如果我在不使用 Magical Record 的情况下执行相同的提取操作,那就可以了:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Group"];

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"groupID" ascending:TRUE selector:nil];

NSArray *sorters = [NSArray arrayWithObject:sort];

[fetchRequest setSortDescriptors:sorters];
NSError *error = nil;

NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];

任何想法为什么我会收到错误?

【问题讨论】:

我无法重现该问题。我已经设置了一个带有 Magical Record 的小项目,它插入了一些组,并完全执行您的 MR_findAllSortedBy:... 获取请求,它工作得很好。 - 你能在“所有 Objective-C 异常”上设置断点,并在异常发生的地方发布堆栈回溯吗? 【参考方案1】:

所以我检查了 github (https://github.com/magicalpanda/MagicalRecord) 上的 Magical Record 存储库,但我没有看到您正在使用的方法(可能是因为文档中有一个 bug 关于获取已排序实体的排序方法但我看到了另外两种推荐用于获取已排序实体的方法。

[entity MR_findAllSortedByProperty:@"property" ascending:YES] // single property [entity MR_findAllSortedByProperty:@"oneProperty,secondProp" ascending:YES] // mutliple properties

【讨论】:

github.com/magicalpanda/MagicalRecord/blob/master/MagicalRecord/… 有方法。有趣,因为我找不到他们在教程中使用的方法。我想知道那部分没有更新吗? 我认为教程是在 20 天前左右更新的,因为当时有一个拉取请求,添加了这两种新方法。这两种方法有效吗? 我在课堂上找不到他们。 嗯,这很奇怪:)) 如果您在 github 存储库中看到 findAllSortedByProperty: 方法,请链接到它们所在的类。我在其中的任何一个中都没有看到该方法。

以上是关于神奇的记录排序错误的主要内容,如果未能解决你的问题,请参考以下文章

并发的神奇记录

hiveSql常见错误记录

错误记录Java 中 ArrayList 排序 ( 使用 Comparator 接口时注意 compare 返回值是 -1 和 +1 )

No buffer space available 一次神奇的维护经历

EF 使用遇到过的错误记录备忘

Pymongo 排序错误