2012-03-01 138 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