Core Data谓词什么都没有返回?

时间:2012-10-09 12:45:51

标签: iphone ios core-data uitableview

我有一个核心数据应用程序,我根据斯坦福大学讲座。

在我的顶级视图控制器中,我创建了一个与“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对象的正确结果。

这个问题可能是什么原因造成的?

topViewCOntroller First Trip Object Second Trip Object

1 个答案:

答案 0 :(得分:0)

最后我找到了答案。结果我在我的对象类别中添加了错误的谓词。我放了

request.predicate = [NSPredicate predicateWithFormat:@"dayNumber = %@", day.dayNumber];

但它真的应该是

request.predicate = [NSPredicate predicateWithFormat:@"dayNumber = %@", [Trip tripWithInfo:[dayInfo objectForKey:TRIP] inManagedObjectContext:context]];