2012-10-09 34 views
0

我有一个核心数据应用程序,我从斯坦福大学的讲座中找到了它。核心数据谓词什么都不返回?

在我的顶级视图控制器中,我创建了一个'Trip',它与'Day'具有一对多的关系。所以它看起来像这样:

[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()),但是屏幕显示什么。当我不使用谓词时,所有内容都显示出来,所以我知道它在那里。我还应该提到,屏幕似乎随机显示第一次或第二次添加跳闸对象的正确结果。

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

topViewCOntroller First Trip Object Second Trip Object

+0

你真的叫'performFetch:'什么地方? –

+0

感谢您的快速回复,我假设performFetch与调用上述方法相同?如果是这样,那么是的。如果我删除谓词,我知道它将显示所有'日'对象,然后我可以看到一切。那么这是否意味着@“whichTrip.tripID =%@”是问题所在? –

+0

你有旅途中的日子吗?如果有,可以直接访问它 - > trip.days(NSSet) – NeverBe

回答

0

我终于找到了答案。原来,我在我的对象类别中添加了错误的谓词。我已经把

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

但它确实应该已经

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