核心数据动态谓词:传递数据?

时间:2014-03-20 14:09:09

标签: ios iphone uitableview core-data nspredicate

这是我的情景: 我有一个“相机”表视图和一个“Rolls”表视图。我想点击相机并加载相应的卷筒。我似乎无法让这个工作。将选定的相机核心数据对象传递到roll表视图NSFetchedResultsController的谓词的正确方法是什么?

相机实体

relationship :roll

目的地:滚动

反向:无反向

滚动实体

关系:相机

目的地:相机

反向:无反向

来自滚动表视图控制器的

- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController != nil) {
    return _fetchedResultsController;
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
                               entityForName:@"Roll" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSSortDescriptor *sort = [[NSSortDescriptor alloc]
                          initWithKey:@"desc" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];

[fetchRequest setFetchBatchSize:20];    

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY camera == %@", self.selectedCamera.objectID];
[fetchRequest setPredicate:predicate];

NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                    managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil
                                               cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;

return _fetchedResultsController;
}

1 个答案:

答案 0 :(得分:0)

你们的关系应该都是反向的(在这种情况下,彼此相反)。这允许Core Data正确管理关系,并允许您在两个方向上导航时方便地设置它。它也恰当地代表了这种关系。

谓词应该是:

NSPredicate *p = [NSPredicate predicateWithFormat:@"camera == %@", self.selectedCamera];

camera实体上使用Roll关系,并检查它是否包含提供的self.selectedCamera实体实例。