我使用Core Data数据库。 我有Entity Album,它有许多实体SpecificImage(获取这些图像集的关键是@“specificImages”) 我希望获得id = 1的Album并按id排序附加的SpecificImages。 我试过了
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"specificImages.id" ascending:YES];
但我收到了错误
由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'这里不允许使用多对键'
这是我的代码:
NSString *entityName = kEntityName;
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];;
NSManagedObjectContext *context = appDelegate.managedObjectContext;
NSEntityDescription *entityDesctiption = [NSEntityDescription
entityForName: entityName
inManagedObjectContext:context];
// find object
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"id == %d", CurrentCategoryItemID];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"specificImages.id" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[request setEntity:entityDesctiption];
[request setPredicate:predicate];
NSArray *objects = [context executeFetchRequest:request error:nil];
[request release];
if (objects == nil)
{
NSLog(@"there was an error");
return;
}
else if ([objects count] == 0)
{
return;
}
NSManagedObject *object = [objects objectAtIndex:0];
当我尝试执行NSArray * objects = [context executeFetchRequest:request error:nil];
时抛出异常答案 0 :(得分:4)
我假设,如果您在相册中有许多特定图像,那么您还将具有从特定图像到相册的反向关系(特定图像中的1个相册对象)。
这里我首先找到所有专辑ID的所有ID,而不是所有专辑,最后形成其中一个SpecificImage对象,我将获得专辑对象。
NSString *entityName = @"SpecificImage";
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];;
NSManagedObjectContext *context = appDelegate.managedObjectContext;
NSEntityDescription *entityDesctiption = [NSEntityDescription
entityForName: entityName
inManagedObjectContext:context];
// find object
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"album.id == %d", CurrentCategoryItemID];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"id" ascending:YES];
[request setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];
[request setEntity:entityDesctiption];
[request setPredicate:predicate];
NSArray *specificImagesArray = [context executeFetchRequest:request error:nil];
[request release];
if (objects == nil)
{
NSLog(@"there was an error");
return;
}
else if ([objects count] == 0)
{
return;
}
Album *album = [(SpecificImage *)[specificImagesArray objectAtIndex:0] album];
specificImagesArray是您要查找的特定图像的数组,相册是您所需的专辑,其ID = CurrentCategoryItemID。
答案 1 :(得分:1)
我认为,没有任何变体,如何做到这一点。我有这个问题。但是我必须在执行获取请求后通过id对其进行处理。