【问题标题】:problem with NSSortDescriptor .i am sorting the in ascending order(alphabetical order)NSSortDescriptor 的问题。我按升序(字母顺序)排序
【发布时间】:2011-04-30 06:00:56
【问题描述】:

我正在使用NSSortDescriptor 使用键bandName 对自定义对象进行排序,但我没有按字母顺序获得输出。我该如何解决?

-(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]);  
}

【问题讨论】:

    标签: iphone objective-c core-data nssortdescriptor


    【解决方案1】:

    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 的检查以打印错误。您可能还想在那里添加额外的错误处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-07
      • 2011-01-30
      • 2019-04-05
      • 2012-04-08
      • 2022-01-06
      相关资源
      最近更新 更多