簡體   English   中英

NSSortDescriptor對多關系

[英]NSSortDescriptor to-many relationships

我使用核心數據數據庫。 我有實體相冊,其中有很多實體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]時,它將引發異常。

我假設,如果Album中有許多SpecificImages,那么從SpecificImage到Album也將成反比關系(SpecificImage中有1個Album對象)。

在這里,我首先找到所需專輯ID的所有SpecialImages,而不是所有專輯,最后以這些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是您要查找的specificImages的數組,而album是ID = CurrentCategoryItemID的所需相冊。

我認為,沒有任何變體,該怎么做。 我有這個問題。 但是我必須在執行獲取請求后按ID播種它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM