簡體   English   中英

NSSortDescriptor 的問題。我按升序(字母順序)排序

[英]problem with NSSortDescriptor .i am sorting the in ascending order(alphabetical order)

我正在使用NSSortDescriptor使用鍵bandName對自定義對象進行排序,但我沒有按字母順序獲取 output。 我該如何解決?

-(void)getdetails
{
    NSLog(@"in getdetail method");
    SongRequestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context1 = [appDelegate managedObjectContext];
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"AddToFav" inManagedObjectContext:context1];
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDesc];
    NSError *error;
    NSMutableArray *array_new=[[NSMutableArray alloc]init];
    [array_new addObjectsFromArray:[context1 executeFetchRequest:request error:&error]];
    //[self.fetchedObjects addObjectsFromArray:[context1 executeFetchRequest:request error:&error]];
    [request release];

**NSSortDescriptor *sortDescriptor;
    sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"bandName" ascending:YES] autorelease];
    NSMutableArray *sortDescriptors = [NSMutableArray arrayWithObject:sortDescriptor];

    //self.fetchedObjects=
    [array_new sortedArrayUsingDescriptors:sortDescriptors];
    [self.fetchedObjects addObjectsFromArray:array_new];
    [array_new release];**
    for (int i=0; i<[self.fetchedObjects count];i++)
    {
        NSManagedObject 
        *addfav=[self.fetchedObjects objectAtIndex:i];
        addFavObject *addfavobject=[[addFavObject alloc]init];
        addfavobject.bandImagePath=[addfav valueForKey:@"bandImagePath"];
        addfavobject.bandId=[addfav valueForKey:@"bandId"];
        addfavobject.bandName=[addfav valueForKey:@"bandName"];
        addfavobject.songId=[addfav valueForKey:@"songId"];
        addfavobject.songListId=[addfav valueForKey:@"songListId"];
        addfavobject.songName=[addfav valueForKey:@"songName"];
        addfavobject.bandRealName=[addfav valueForKey:@"bandRealName"];
        addfavobject.biography=[addfav valueForKey:@"biography"];
        NSLog(@"addto fav object biography is %@",addfavobject.biography);
    [self.addTofavObjectArray addObject:addfavobject];
        [addfavobject release];
    }

    //NSArray *reverse = [[self.addTofavObjectArray reverseObjectEnumerator] allObjects];
    //    [self.addTofavObjectArray removeAllObjects];
    //  [self.addTofavObjectArray addObjectsFromArray:reverse];

    NSLog(@"self.addTofavObjectArray is %@",self.addTofavObjectArray);

    NSLog(@"FETCHED OBJECTS count is %d",[self.fetchedObjects count]);  
}

sortedArrayUsingDescriptors:不對它發送到的數組進行排序。 它返回一個帶有排序對象的新數組。 它應該與:

NSArray *sortedArray = [array_new sortedArrayUsingDescriptors:sortDescriptors];
[self.fetchedObjects addObjectsFromArray:sortedArray];

不過,您不需要像那樣單獨進行排序。 您可以將排序描述符提供給您的 fetch 請求,並且從執行它返回的數組將被排序。 我強烈建議您這樣做,而不是您的做法。 因此,您可以將 for 循環之前的所有內容替換為:

    SongRequestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context1 = [appDelegate managedObjectContext];
    NSEntityDescription *entityDesc = [NSEntityDescription entityForName:@"AddToFav" inManagedObjectContext:context1];

    NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"bandName" ascending:YES] autorelease];
    NSMutableArray *sortDescriptors = [NSMutableArray arrayWithObject:sortDescriptor];
    [sortDescriptor release];

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    [request setEntity:entityDesc];
    [request setSortDescriptors:sortDescriptors];

    NSError *error;
    NSMutableArray *array_new = [context1 executeFetchRequest:request error:&error];

    if (!array_new)
    {
        NSLog(@"error: %@", error);
    }

    [self.fetchedObjects addObjectsFromArray:array_new];
    [request release];

我還添加了對 array_new 的檢查以打印錯誤。 您可能還想在那里添加額外的錯誤處理。

暫無
暫無

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

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