1

我有一个核心数据问题NSFetchedResultsController。我在父实体和子实体之间有一对多的关系。属性中的数组未按(数字是模型中的 int32 属性)childFetchedResults.fetchedObjects排序。我是否使用便利类别方法number似乎并不重要。MagicalRecord

NSFetchRequest *req = [Child MR_requestAllSortedBy:@"number" ascending:YES withPredicate:[NSPredicate predicateWithFormat:@"parent = %@", self.parent]];
childFetchedResults = [[NSFetchedResultsController alloc] initWithFetchRequest:req managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:nil];
childFetchedResults.delegate = self;
NSError *error;
[childFetchedResults performFetch:&error];
NSLog(@"fetched objects: %@", childFetchedResults.fetchedObjects);

但是,如果我使用完全相同的排序描述符对获取的对象数组进行排序,它可以正常工作:

NSLog(@"fetched objects: %@", [childFetchedResults.fetchedObjects sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"number" ascending:YES]]]);

我收集你只能使用 Core Data 在为获取请求指定排序描述符时可以传递给 SQLite 存储的比较器。但我觉得在这种情况下这不重要,因为 SQLite 必须支持按数字排序。

有人解决了这个问题吗?我觉得这与此处描述的问题类似:NSSortDescriptor not being called

至于MR_requestAllSortedBy,它在MagicalRecord,这里是实现:

+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context
{
    NSFetchRequest *request = [self MR_requestAllInContext:context];

    NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey:sortTerm ascending:ascending];
    [request setSortDescriptors:[NSArray arrayWithObject:sortBy]];

    return request;
}
4

2 回答 2

2

所以这是由未保存更改的嵌套 MOC 获取引起的。使用父 MOC 获取或在执行获取之前保存嵌套的 MOC 可以解决问题。类似于这个问题中发生的事情:NSSortdescriptor ineffective on fetch result from NSManagedContext

于 2012-06-18T03:25:14.463 回答
0
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"RemainderDataBase" inManagedObjectContext:[self managedObjectContext]];
    NSSortDescriptor *nameSort = [[NSSortDescriptor alloc]initWithKey:@"title" ascending:YES];
    NSArray *sortDescriptor = [[NSArray alloc]initWithObjects:nameSort, nil];
    fetchRequest.sortDescriptors = sortDescriptor;
    NSPredicate *p1=[NSPredicate predicateWithFormat:@"startdate > %@", [NSDate date]];
    [fetchRequest setPredicate:p1];
    [fetchRequest setEntity:entity];

我想你正在寻找上面的代码..

于 2016-06-17T11:52:14.190 回答