核心数据已经为我处理了这种关系,我是否需要构建一个新的查询才能使用NSFetchedResultsController?
我有"专辑"包含"照片"。
Album *anAlbum = [...getalbum...];
* cellForItemAtIndexPath中的:我想做点什么:
anAlbum.photos
但是,我无法将indexPath转换为NSSet成员索引。 (显然)
没有核心数据我通常只会自己生成所需的查询。我想使用核心数据(显然,再次)。
答案 0 :(得分:0)
通常,您要将该集转换为NSArray(可能使用NSSet的allobject),并且可能使用NSSortDescriptor或NSPredicate或两者对其进行排序或过滤。然后,您可以使用索引路径部分/行按索引访问数组。
如果您需要NSMutableArray,显然可以使用NSMutableArray,但尝试单独访问NSSet项是一件痛苦的事情,因为您必须枚举它们以找到您正在寻找的内容。只需创建一个数组。以下是我完成此操作的示例:
NSArray *tableViewData = [NSArray arrayWithArray:[album.photos allObjects]];
然后,您只需使用:
访问tableViewData对象UIImage *obj = UIImageJPEGRepresentation([tableViewData objectAtIndex:indexPath.row], 0.50f);
这样的事情。
答案 1 :(得分:0)
"照片"实体(anAlbum.photos是关系)包含 资产网址。我没有问题显示它更像是一个 关心我如何使用NSSet(核心数据关系) NSFectchedResultsController - 或直接与视图 (收集/表)。
首先,我会使用NSFetchedResultsController
。该组件与表一起使用,并允许以延迟加载方式加载数据。
其次,我要使用的获取请求应该针对Photo
实体运行,而不是针对Album
。换句话说,您应该选择属于特定相册的所有照片。
这里的代码,我会用...
- (NSFetchedResultsController *)fetchedResultsController {
if (_fetchedResultsController != nil) {
return _fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription
entityForName:@"Photo" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"album == %@", anAlbum];
[request setPredicate:predicate];
NSSortDescriptor *sort = [[NSSortDescriptor alloc]
initWithKey:@"takeAt" ascending:NO];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
[fetchRequest setFetchBatchSize:20];
NSFetchedResultsController *theFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:nil
cacheName:nil];
self.fetchedResultsController = theFetchedResultsController;
return _fetchedResultsController;
}
所以现在在你的tableView:cellForRowAtIndexPath:
中你会使用
Photo *photo = [_fetchedResultsController objectAtIndexPath:indexPath];
// access the album the photo belongs to
Album* album = photo.album;
您可以在Core Data Tutorial for iOS: How To Use NSFetchedResultsController了解NSFetchedResultsController
的主要概念。