Cocoa touch NSFetchedResultsController为indexPathForObject返回nil

Cocoa touch NSFetchedResultsController为indexPathForObject返回nil,cocoa-touch,uitableview,core-data,nsfetchedresultscontroller,nsindexpath,Cocoa Touch,Uitableview,Core Data,Nsfetchedresultscontroller,Nsindexpath,我的FetchedResultsController FRC设置如下: NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSEntityDescription *entity = [NSEntityDescription entityForName:@"MTWMeeting" inManagedObjectContext:[NSManagedObjectContext MR_defaultContext]]; [fet

我的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;
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];
我的数据库非常简单——我有一个MTWMeeting实体和一个MTWDay实体,可以有许多会议。每次会议只能有一个家长日

“我的表格视图”是按1个MTWDay实体为1个节设置标题的

现在我需要滚动到该单元格中的特定索引

我是这样做的:

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;
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];
现在,无论我做什么,我们的路径索引路径总是为零。但是,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>";
})

您是否执行了提取操作而没有出现错误

NSError *error;
[self.fetchedResultsController performFetch:&error];

如果有,请检查我们的会议是否在self.fetchedResultsController.fetchedObject中执行了提取操作,没有出现错误吗

NSError *error;
[self.fetchedResultsController performFetch:&error];

如果有,请检查我们的会议是否在self.fetchedResultsController.fetchedObject中

您的FetchedResults控制器设置为不带谓词,以便它获取所有会议,因此讨论中的会议应该在FRC的FetchedObject中

在提供的代码范围内,您可以检查:

目标日是零吗? targetDay.dayMeetings是否为空NSSet? 获取的结果控制器是否为零? 你忘了给财务报告委员会打电话了吗? 您是否检查FRC的上下文是否与获取对象的上下文相同? 您是否从用于放置对象的同一个“获取结果”控制器获取对象?
您的fetched results controller是在没有谓词的情况下设置的,因此它会获取所有会议,因此相关会议应该位于FRC的FetchedObject中

在提供的代码范围内,您可以检查:

目标日是零吗? targetDay.dayMeetings是否为空NSSet? 获取的结果控制器是否为零? 你忘了给财务报告委员会打电话了吗? 您是否检查FRC的上下文是否与获取对象的上下文相同? 您是否从用于放置对象的同一个“获取结果”控制器获取对象?
好的,没有错误,self.fetchedResultsController.fetchedObject确实包含我的对象。现在我想知道下一步是什么…你确定它是同一个对象而不是两个具有相同数据的对象吗?您可以通过调用[self.fetchedResultsController.fetchedObjects containsItem:ourMeeting]进行检查,看看是否返回true。事实是,它确实返回true。我已经仔细检查过了,甚至三次检查过了。你有没有检查过创建路径的方法?也许有什么东西将self.fetchedResultsController设置为零?嗯,这也很奇怪,但不,这完全没问题,FRC不是零。好吧,没有错误,self.fetchedResultsController.fetchedObject确实包含我的对象。现在我想知道下一步是什么…你确定它是同一个对象而不是两个具有相同数据的对象吗?您可以通过调用[self.fetchedResultsController.fetchedObjects containsItem:ourMeeting]进行检查,看看是否返回true。事实是,它确实返回true。我已经仔细检查过了,甚至三次检查过了。你有没有检查过创建路径的方法?也许有什么东西将self.fetchedResultsController设置为零?嗯,这也很奇怪,但不,这完全没关系,FRC不是零。正如对类似答案的评论中所述,令人惊讶的是,self.fetchedResultsController.fetchedObject包含我们的会议。FRC不是零,我已执行fetch。此外,我已经使用MTWDay对象的示例控制台打印输出编辑了我的文章。请参阅我对上下文和获取结果控制器的编辑。我将仔细检查上下文,谢谢您的想法!正如对类似答案的评论中所述,令人惊讶的是,self.fetchedResultsController.fetchedObjects包含我们的会议。FRC不是零,我已执行fetch。此外,我已经使用MTWDay对象的示例控制台打印输出编辑了我的文章。请参阅我对上下文和获取结果控制器的编辑。我将仔细检查上下文,谢谢您的想法!你有没有找到解决办法/解释?你有没有找到解决办法/解释?