NSFetchedResultsController在初始获取时不排序

我有NSFetchedResultsController核心数据问题。 我在父母和子女实体之间有一对多的关系。 childFetchedResults.fetchedObjects属性中的数组不是按number排序的(number是模型中的int32属性)。 如果我使用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]]]);

我收集你只能使用核心数据可以传递给SQLite存储的指定排序描述符的比较器。 但是我觉得在这种情况下这应该不重要,因为通过数字排序必须得到SQLite的支持。

任何人解决了这个? 我觉得它和这里描述的问题类似:NSSortDescriptor没有被调用。

至于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;
}

所以这是由于对未嵌入更改的嵌套MOC进行提取而造成的。 在执行获取之前,使用父MOC获取或保存嵌套的MOC可以解决问题。 类似于这个问题:NSSortdescriptor无法从NSManagedContext获取结果


    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];

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

链接地址: http://www.djcxy.com/p/36143.html

上一篇: NSFetchedResultsController not sorting on initial fetch

下一篇: Sorting an NSFetchRequest by a dependent property using a to