2010-10-10 296 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