核心数据谓词啥都不返回?
Posted
技术标签:
【中文标题】核心数据谓词啥都不返回?【英文标题】:Core Data predicate returning nothing?核心数据谓词什么都不返回? 【发布时间】:2012-10-09 12:45:51 【问题描述】:我有一个基于斯坦福讲座的 Core Data 应用程序。
在我的***视图控制器中,我创建了一个与“Day”具有一对多关系的“Trip”。所以它看起来像:
[Trip tripWithInfo:trip inManagedObjectContext:self.tripDatabase.managedObjectContext];
for (int i=0; i<someNumber; i++)
NSDictionary *dayInfo = [[NSDictionary alloc] initWithObjectsAndKeys:[trip copy], TRIP, [NSNumber numberWithInt:i], DAY_NUMBER, nil];
[Day dayWithDayInfo:dayInfo inManagedObjectContext:self.tripDatabase.managedObjectContext];
行程运行良好,并在我的***视图控制器中正确显示。问题是当我选择一个行程时,应该继续使用 daytableviewcontroller(应该显示该行程的天数),daytableviewcontroller 是空白的。
我正在执行我的获取请求:
- (void)setupFetchedResultsController
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:DAY];
request.predicate = [NSPredicate predicateWithFormat:@"whichTrip.tripID = %@", self.trip.tripID];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:DAY_NUMBER ascending:YES]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.trip.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
tripID 我认为是正确的(当我使用 NSLog() 检查时完全一样),但是屏幕什么也不显示。当我不使用谓词时,会显示所有内容,因此我知道它在那里。我还应该提到,屏幕似乎在第一次或第二次添加 Trip 对象时随机显示正确的结果。
这个问题可能是由哪些原因造成的?
【问题讨论】:
你真的在某个地方给performFetch:
打电话吗?
感谢您的快速回复,我假设 performFetch 与调用上述方法相同?如果是这样,那么是的。如果我删除谓词,我知道它会显示所有“Day”对象,那么我可以看到所有内容。那么这是否意味着@"whichTrip.tripID = %@" 是问题所在?
你有关系Days in the Trip吗?有的话可以直接访问 -> trip.days (NSSet)
看来我确实有几天,但我将如何在谓词中使用它?
【参考方案1】:
我终于找到了答案。原来我在我的对象类别中添加了错误的谓词。我放了
request.predicate = [NSPredicate predicateWithFormat:@"dayNumber = %@", day.dayNumber];
但它真的应该是
request.predicate = [NSPredicate predicateWithFormat:@"dayNumber = %@", [Trip tripWithInfo:[dayInfo objectForKey:TRIP] inManagedObjectContext:context]];
【讨论】:
以上是关于核心数据谓词啥都不返回?的主要内容,如果未能解决你的问题,请参考以下文章
NSFetchedResultsController 啥都不返回
当您啥都不返回时,从 collectionView(_:viewForSupplementaryElementOfKind:at:) 返回啥?