我使用NSSortDescriptor排序與firstName的聯繫人,但如果第一個名字是零,排序它將是錯誤的。NSSortDescriptor優先
,如果我有:
接觸1:姓= BAAAA和LastName = XXXXXX
接觸2:姓=零和LastName = AAAAAA
排序它會像這個。
1- AAAAAAA
2- BAAAA XXXXXX
,所以我需要知道,如果存在的解決方案,使名字和姓氏之間的優先級。
Firstname ==nil
如果所以採取名字
由於
我使用NSSortDescriptor排序與firstName的聯繫人,但如果第一個名字是零,排序它將是錯誤的。NSSortDescriptor優先
,如果我有:
接觸1:姓= BAAAA和LastName = XXXXXX
接觸2:姓=零和LastName = AAAAAA
排序它會像這個。
1- AAAAAAA
2- BAAAA XXXXXX
,所以我需要知道,如果存在的解決方案,使名字和姓氏之間的優先級。
Firstname ==nil
如果所以採取名字
由於
NSSortDescriptor *descriptor1 = [[NSSortDescriptor alloc] initWithKey:@"lastName" ascending:YES];
NSSortDescriptor *descriptor2 = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES];
NSArray *sorted = [contatcs sortedArrayUsingDescriptors:@[descriptor1, descriptor2]];
陣列中的描述符的順序決定優先級。對於核心數據的查詢,那麼會是這樣的
NSManagedObjectContext *moc = [self managedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:entityDescription];
[request setSortDescriptors:@[descriptor1, descriptor2]];
NSError *error;
NSArray *array = [moc executeFetchRequest:request error:&error];
if (array == nil)
{
// Deal with error...
}
你也可以繼承NSSortDescriptor
並重寫compareObject:toObject:
方法:
- (NSComparisonResult)compareObject:(id)object1 toObject:(id)object2 {
NSString *firstName1 = [object1 valueForKey:@"firstName"];
NSString *lastName1 = [object1 valueForKey:@"lastName"];
NSString *firstName2 = [object2 valueForKey:@"firstName"];
NSString *lastName2 = [object2 valueForKey:@"lastName"];
if(firstName1 == nil || firstName2 == nil) {
return [lastName1 compare:lastName2];
}
return [firstName1 compare:firstName2];
}
感謝您的答覆。 但是,如果我想用NSSortDescriptors創建一個提取請求(核心數據),我該怎麼做。 這是一個數組排序不是獲取請求。 – Bacem
我發佈了核心數據代碼... – jbat100