2010-10-10 261 views
10

我目前正在尝试设置一个NSFetchedResultsController,它将根据多对多关系中的实体数量排序我的表视图。我不确定这是否会在计数时产生影响,但这也是一个反向关系。核心数据:按对数排序以多对多的关系

我觉得这样的事情会工作得很好:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Parent" 
inManagedObjectContext:managedObjectContext]; 

NSSortDescriptor *sortDescriptor1 = [[NSSortDescriptor alloc] 
initWithKey:@"[email protected]" ascending:YES]; 

NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor1, 
nil]; 

[fetchRequest setSortDescriptors:sortDescriptors]; 

我不断收到“含KVC总在那里,不应该有一个的keyPath;未能处理儿童。@ count'。

有什么想法可能会出错?

+0

你可能想使用'arrayWithObject:'而不是'alloc'和'initWithObjects:'。除其他原因外,不释放阵列不会导致泄漏。 – 2010-10-10 04:10:24

+0

这只是我试图完成的伪代码,我在我的实际代码中释放数组。 – avenged 2010-10-10 04:41:40

+0

类似的问题:http://stackoverflow.com/questions/1520522/nssortdescriptor-and-to-many-relationships – paulmelnikow 2011-08-17 06:16:52

回答

0

我最终为我的实体添加了一个count属性,我只是在增加一个新关系时增加了它。使fetchedResultsController更易于使用。

如果您找到使用KVC的方法,请关注。我从不需要修复这个黑客。

这样的事情可能是有用的:

entity *match;  
match = (entity *)[objects objectAtIndex:0]; 
     NSSet *t = [match valueForKey:@"entity"]; 
     if(![t containsObject:newEntity]){ 
      int newCount = [match.count intValue] +1; 
     [match addEntityObject:newEntity]; 
      [match setCount:[NSNumber numberWithInt:newCount]]; 
+0

在我看来,必须是一个更好,更优雅的解决方案。 有谁知道吗?谢谢。 – Ricardo 2012-04-09 11:28:54

3

据我知道你不能在查询应用@count,但你可以很容易地将其应用到获取阵列。

NSEntityDescription * entity = [NSEntityDescription entityForName:@"Parent" inManagedObjectContext:self.managedObjectContext]; 

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
[request setEntity:entity]; 
NSError *error; 
NSArray *results = [self.managedObjectContext executeFetchRequest:request error:&error]; 

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"[email protected]" ascending:NO]; 
NSArray *descriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil]; 
NSArray *sortedArray = [results sortedArrayUsingDescriptors:descriptors]; 
1

加入KVO存取-countOf<Key>以我的管理对象模型的属性作为一个整数类型。我没有在我的NSManagedObject子类中为这个属性实现任何东西,因为所有的魔法似乎都在发生。

因此,在这种特殊情况下,将一个属性countOfChildren添加到Parent实体。这应该删除异常。

编辑:此修复似乎只适用于iOS 6.1,不适用于iOS 6.0。

+1

嘿,你能否提供更多细节?作者应该在模型中添加countOfChildren属性,对吧?它属于什么类型的属性?这个设置还有更多吗? – 2014-07-01 12:28:31