2012-05-30 73 views
0

我使用Core Data數據庫。 我有實體相冊,有很多實體SpecificImage(獲取這些圖像的集合的關鍵是@「specificImages」) 我想獲取id = 1的相冊,並通過id對附加的SpecificImages進行排序。 我試圖NSSortDescriptor對多關係

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"specificImages.id" ascending:YES]; 

,但我得到的錯誤

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'to-many key not allowed here'

這裏是我的代碼:

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 *對象= [背景executeFetchRequest:request error:nil];

回答

4

我假設,如果您在Album中有很多SpecificImages,那麼您也將具有從SpecificImage到Album(SpecificImage中的1個Album對象)的相反關係。

在這裏,我首先找到所需的專輯ID的所有SpecificImages而不是所有的相冊,並在最終的形式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的數組你正在尋找和專輯是你需要的專輯ID = CurrentCategoryItemID。

+0

我想對附加圖片進行排序,但不要對圖片進行排序然後返回相冊。所以我應該使用類似[NSSortDescriptor sortDescriptorWithKey:@「specificImages.id」升序:YES]; –

+0

specificimages是一個nsset對象..所以沒有id ..並且在fetchRequest中添加一個sortdescriptor通過比較所有結果對象中的th鍵的值來對結果數組進行排序。 –

+0

我所做的是最好的解決方案對於你的問題..還有一個效率更低的解決方案..這將不包括fetchRequest中的任何sortdescriptors ..或者你可以獲取你想要的專輯,然後訪問它的specifcimages nsset並將值分類到你的願望 –

1

我想,沒有任何變種,如何做到這一點。我有這個問題。但是在執行提取請求後,我不得不通過id來播放它。