0

NSSortDescriptor を使用して firstName で連絡先を並べ替えますが、名が nil の場合、並べ替えが正しくありません。

私が持っている場合:

連絡先 1: 名 = BAAAA および姓 = XXXXXX

連絡先 2: Firstname = nil and LastName = AAAAAA

このようなものになります。

1-ああああああ

2- ばあああXXXXXX

そのため、Firstname と LastName の間で優先順位を付けるソリューションが存在するかどうかを知る必要があります。

その場合 Firstname ==nil、LastName を取ります

ありがとう

4

2 に答える 2

1
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...
}
于 2013-11-15T08:53:47.963 に答える
0

メソッドをサブクラス化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];
}
于 2013-11-15T08:58:07.960 に答える