Сортировка столбца NSTableView с адресами IPv4 - PullRequest
2 голосов
/ 01 марта 2012

Я хочу отсортировать столбец NSTableView с адресами IPv4, используя SortDescriptor.Это у меня до сих пор:

NSArray *devicesSortDescriptor = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"ip" ascending:YES comparator:^NSComparisonResult(id ipstring1, id ipstring2) {
        const char * ipch1 = [ipstring1 cStringUsingEncoding:NSASCIIStringEncoding];
        const char * ipch2 = [ipstring2 cStringUsingEncoding:NSASCIIStringEncoding];
        struct in_addr ip1, ip2;

        inet_aton(ipch1, &ip1);
        inet_aton(ipch2, &ip2);

        if (ip1.s_addr > ip2.s_addr)
            return NSOrderedDescending;
        else if (ip1.s_addr == ip2.s_addr)
            return NSOrderedSame;
        else
            return NSOrderedAscending;
    }]];

И вот результат:

strange sorted IPv4s

Что я делаю не так?Я имею в виду, если ip1.s_addr> ip2.s_addr, то его причины NSOrderedDescending .. o_O

Спасибо!

1 Ответ

2 голосов
/ 01 марта 2012

Я только что узнал, что все, что вам нужно, это числовой компаратор:

Objective-C:

comparator:^(NSString *a, NSString *b) {
        return [a compare:b options:NSNumericSearch];
    }   

Swift:

comparator: {
        (a, b) -> NSComparisonResult in

        let result = a.compare(b as! String, options: NSStringCompareOptions.NumericSearch)
        return result
    }

:)

...