0

我使用核心数据数据库。我有实体专辑,它有很多实体SpecificImage(获取这些图像的关键是@“specificImages”)我想获得id = 1的专辑并按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]; 时,它会引发异常

4

2 回答 2

4

我假设,如果您在 Album 中有很多 SpecificImages ,那么您还将从 SpecificImage 到 Album 存在反向关系(SpecificImage 中的 1 个 Album 对象)。

在这里,我首先找到所需专辑 id 的所有特定图像,而不是所有专辑,最后形成这些特定图像对象之一,我将取回专辑对象。

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 是您要查找的 specificImages 数组,album 是您需要的 id = CurrentCategoryItemID 的相册。

于 2012-07-09T06:15:38.110 回答
1

我认为,没有任何变体,如何做到这一点。我有这个问题。但是在执行 fetch 请求后,我必须按 id 对其进行排序。

于 2012-07-13T12:48:56.697 回答