Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
595 views
in Technique[技术] by (71.8m points)

cocoa touch - How to sort NSPredicate

I am trying to sort my array while using NSPredicate.. I have read other places that possibly using NSSortDescriptor could be an option. Having some trouble figuring this out.

I am attempting to sort my array by companyName.

Any advice appreciated, thanks

Greg

- (void)filterSummaries:(NSMutableArray *)all byNameThenBooth:(NSString*) text results:(NSMutableArray *)results
{
    [results removeAllObjects];

    if ((nil != text) && (0 < [text length])) {        
        if ((all != nil) && (0 < [all count])) {
            NSPredicate *predicate = [NSPredicate predicateWithFormat: @"companyName contains[cd] %@ OR boothNumber beginswith %@", text, text];
            [results addObjectsFromArray:[all filteredArrayUsingPredicate:predicate]];        
        }
    }
    else {
        [results addObjectsFromArray:all];
    }
}
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

you have several options how to sort an array:

I'll show a NSSortDescriptor-based approach here.

NSPredicate *predicate = [NSPredicate predicateWithFormat:
                                  @"companyName contains[cd] %@ OR boothNumber beginswith %@",
                                  text,
                                  text];

// commented out old starting point :)
//[results addObjectsFromArray:[all filteredArrayUsingPredicate:predicate]];

// create a descriptor
// this assumes that the results are Key-Value-accessible
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"companyName" 
                                                             ascending:YES];
//
NSArray *results = [[all filteredArrayUsingPredicate:predicate]  
                     sortedArrayUsingDescriptors:[NSArray arrayWithObject:descriptor]];

// the results var points to a NSArray object which contents are sorted ascending by companyName key

This should do your job.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...