2012-03-01 74 views
2

我想使用SortDescriptor對具有IPv4地址的NSTableView列進行排序。這是我到目前爲止有:使用IPv4地址對NSTableView列排序

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

謝謝!

回答

2

我才發現,所有你需要的是一個數字比較:

的Objective-C:

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

斯威夫特:

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

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

:)

+0

爲我工作,謝謝! – jonbauer 2015-03-02 00:20:41