[英]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.