Сортировка столбца NSTableView с адресами IPv4
Я хочу отсортировать столбец 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;
}]];
И вот результат:
Что я делаю неправильно? Я имею в виду, если ip1.s_addr > ip2.s_addr, то его причины NSOrderedDescending.. o_O
Спасибо!
1 ответ
Решение
Я только что узнал, что все, что вам нужно, это числовой компаратор:
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
}
:)