2016-10-07 55 views
1

我想取兩個實體,例如:學生與emailattribute和教授,兩者具有相同的父實體如:人與attributesentityId, firstName and lastName我要生成它們兩節使用NSFetchedResultsController。 這裏是吸氣劑一部分fetchedResultsController核心數據不返回完整對象,數據:<fault>

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; 

[fetchRequest setFetchBatchSize:20]; 
[fetchRequest setReturnsObjectsAsFaults:NO]; 

NSEntityDescription *description = [NSEntityDescription entityForName:@"Person" 
               inManagedObjectContext:self.managedObjectContext]; 
[fetchRequest setEntity:description]; 

NSSortDescriptor *firstNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]; 
NSSortDescriptor *lastNameDescriptor = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES]; 
[fetchRequest setSortDescriptors:@[firstNameDescriptor, lastNameDescriptor]]; 

NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] 
                 initWithFetchRequest:fetchRequest 
                 managedObjectContext:self.managedObjectContext 
                  sectionNameKeyPath:@"entityId" 
                    cacheName:nil]; 

所有Students具有相同entityId和所有Professors

在的tableView我有兩個原型細胞之一Student,另一個用於ProfessorIt looks smth like this

,我得到兩個部分預期,但學生在不同的部分,我已經印在這樣的控制檯fetchedResultsController所有對象,po [self.fetchedResultsController objectAtIndexPath: [NSIndexPath indexPathForItem:1 inSection:1]]所有的教授都印有fault

<Professor: 0x6080000befc0> (entity: Professor; id: 0xd0000000001c0002 <x-coredata://03A3ECAD-CCA7-424E-86F9-258D25372BA1/Professor/p7> ; data: <fault>) 

我已經迫使使用[request setReturnsObjectsAsFaults:NO]獲取請求返回完整對象,但它沒有效果。

爲什麼會這樣呢?

+0

發生了什麼事ns如果您嘗試獲取這些對象的其中一個屬性的值,而不是僅打印該對象? –

+0

在實際嘗試使用獲取實體的任何字段之前,核心數據不會加載所有數據是很正常的。 – alexburtnik

+0

如果我在代碼NSLog(@「%@」,profesor.firstName)中打印它們;它打印 – astrolka

回答

1

爲了避免「數據斷層」問題,您應該設置NSFetchRequest的這個領域:

request.returnsObjectsAsFaults = NO; 

要分開教授學生分爲兩個部分,你可以使用多個NSFetchedResultsControllers,如下所述: https://stackoverflow.com/a/2309855/1689376

爲避免重複您的代碼,只需創建一個像這樣的方法並調用它兩次:

- (NSFetchedResultsController) createFetchedResultsController: (NSString *) entityName { 
//move your code here 
}