對於EntityA與EntityB具有多對一關係的核心數據模型,我想創建一個EntityA對象列表,它們按EntityB的名稱排序相關。通常情況下做到這一點我會成立這樣的讀取請求:nsfetchedresultscontroller中段名關鍵路徑的無關係值
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
然後我會成立了我的請求的值(在這種情況下,它是由種名稱排序廠家的名單有些植物已經沒有種設置。 。)
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Plant" inManagedObjectContext:self.managedObjectContext];
NSSortDescriptor *sortDescriptorOne = [[NSSortDescriptor alloc] initWithKey:@"species.name" ascending:YES];
NSString *sectionKeyPath = @"species.name";
然後我完成它與平常的東西:
[fetchRequest setEntity:entity];
// Set the batch size to a suitable number.
[fetchRequest setFetchBatchSize:20];
NSArray *sortDescriptors = @[sortDescriptorOne];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:sectionKeyPath
cacheName:@"plantsCache"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
[NSFetchedResultsController deleteCacheWithName:@"plantsCache"];
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _fetchedResultsController;
但結果我得到的是不適合我的工作,因爲關係是可選的。所以EntityA與EntityB有一些關係,有些則沒有。當EntityA的關係值爲零時,結果控制器似乎不知道該怎麼做。
任何建議,我可以做些什麼來繼續使用關係的價值,但允許一些對象爲零的部分?
實體A是植物和實體B是物種?那麼一對多的關係是從EntityB到EntityA,而不是像你的第一句話那樣呢? - 與物種無關的植物究竟發生了什麼?他們沒有提取,沒有顯示,...? –
你是對的我把它倒過來了。我的意思是EntityA(工廠)與EntityB(物種)有着多對一的關係。與任何物種無關的植物出現在空白(未命名)部分,核心數據向控制檯投訴。這種行爲實際上是我想要的。但是如果我從詳細視圖返回列表視圖,添加了一個沒有物種的工廠,那麼列表將不會顯示額外的工廠項目,直到再次調用fetchedresultscontroller。最好我不想在viewWillAppear上重新填充結果控件。 – jedipixel
也許可以通過向工廠實體添加一個方法(或瞬態屬性)'sectionName'並將其用作'sectionNameKeyPath'來解決未命名的部分問題(和投訴)。該方法應該返回'self.species.name'或一個空字符串。 - 我目前無法測試,所以我不知道這是否有幫助。 –