我的FetchedResultsController
(FRC)设置如下:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MTWMeeting" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]];
[fetchRequest setEntity:entity];
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"meetingDay.dayTimestamp" ascending:YES];
NSSortDescriptor *sort2 = [[NSSortDescriptor alloc] initWithKey:@"meetingTimestamp" ascending:YES];
[fetchRequest setSortDescriptors:@[sort, sort2]];
NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:@"meetingDay.dayTimestamp" cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
我的数据库非常简单 - 我有一个MTWMeeting
实体和一个可以召开很多会议的MTWDay
实体。每次会议只能有一个父母日。
我的表格视图由1个MTWDay
实体的标题设置为1个部分。
现在我需要滚动到该单元格中的特定索引。
我这样做:
MTWDay *targetDay = [MTWCoreDataManager suitableDayForMeetingWithTimestamp:[date timeIntervalSince1970]];
MTWMeeting *ourMeeting = [targetDay.dayMeetings anyObject];
NSIndexPath *ourPath = [self.fetchedResultsController indexPathForObject:ourMeeting];
NSIndexPath *tmpPath = [NSIndexPath indexPathForRow:0 inSection:ourPath.section];
现在,无论我做什么,ourPath
索引路径始终是nil
。但是,MTWDay
和MTWMeeting
对象是我从核心数据堆栈获得的真实核心数据对象。
我有什么步骤摆脱这种行为?我几天没有任何机会一直在努力解决这个问题。
修改
这是上面代码中使用的ourMeeting
核心数据对象的打印输出示例:
<MTWDay: 0x1742a8d00> (entity: MTWDay; id: 0xd000000001780008 <x-coredata://B0F694E1-7A45-4D1E-BB26-6F0A929A135D/MTWDay/p94> ; data: {
dayDisplayTitle = "\U0432\U043e\U0441\U043a\U0440\U0435\U0441\U0435\U043d\U044c\U0435";
dayEvents = "<relationship fault: 0x170230da0 'dayEvents'>";
dayID = nil;
dayMeetings = (
"0xd000000003440002 <x-coredata://B0F694E1-7A45-4D1E-BB26-6F0A929A135D/MTWMeeting/p209>"
);
dayNumericID = 16;
dayTimestamp = "1.416089e+09";
daysMonth = "0xd000000000140006 <x-coredata://B0F694E1-7A45-4D1E-BB26-6F0A929A135D/MTWMonth/p5>";
})
答案 0 :(得分:-1)
您是否在没有错误的情况下执行了提取?
NSError *error;
[self.fetchedResultsController performFetch:&error];
如果有,请检查ourMeeting
是否在self.fetchedResultsController.fetchedObjects
答案 1 :(得分:-1)
您设置的结果控制器没有谓词,因此它会提取所有会议,因此相关会议应该在FRC的fetchedObjects
中。
在提供的代码范围内,您可以查看:
targetDay
nil?targetDay.dayMeetings
为空NSSet
?performFetch
?