2011-06-27 27 views
1

其他人设计这个类有一个ID的NSString(我不知道为什么说实话)。所以,有些对象的ID为空(“空白”),有些对象具有@“id12345”或其他特征。我想通过数字为我的UITableView排序比较一个NSString和字符串中的NSNumber

我所做的第一件事就是使用:

stringByReplacingOccurrencesOfString:@"id" withString:@""]; 

,所以我可以得到的数量。我确定有一种方便的方法从NSString中获取NSInteger,但我还没有查看它。然后我有点卡住,因为

因为我的对象,标记,具有此ID的NSString,我如何按数字排序而不替换对象中的原始值?我最初的想法是从nsstring获取id号并进行排序。但是,我不想替换原始的nsstring。我拥有的类基本上只是显示和排序数据。

这是我到目前为止有:

- (NSArray *)sortByID:(NSArray *)sortDescriptors { 
    for (Marker *m in self.MarkersList) { 
     if (![m.id length] == 0) { 
      NSString *str = [m.id stringByReplacingOccurrencesOfString:@"id" withString:@""]; 
     // don't know what to do here.... 
     } 
    } 
    return [self.MarkersList sortedArrayUsingDescriptors:sortDescriptors]; 
} 

回答

0

因此,如果您保证您的所有字符串看起来像ID ######,您可以从字符串,你可以使用字符串替换ID,然后在后intValue方法获得字符串的int值,然后只是比较两个整数...希望这可以帮助

2

我真的不明白你为什么在这里使用sortDescriptors,因为你只是按数字排序。

我会使用一个比较块(假设你在iOS 4或以上),并做如下图所示:

- (NSArray *)sortByID { 

NSArray* orderedList = [self.MarkersList 
         sortedArrayUsingComparator:^(id obj1, id obj2) 
        { 
         Marker* m1 = (Marker*) obj1; 
         Marker* m2 = (Marker*) obj2; 

         NSString* str; 

         str = [m1.id stringByReplacingOccurrencesOfString:@"id" 
           withString:@""]; 
         NSInteger num1 = [str integerValue]; 

         str = [m2.id stringByReplacingOccurrencesOfString:@"id" 
           withString:@""]; 
         NSInteger num2 = [str integerValue]; 

         NSComparisonResult result; 
         if (num1 < num2) { 
          result = NSOrderedAscending; 
         } else if (num1 == num2) { 
          result = NSOrderedSame; 
         } else { 
          result = NSOrderedDescending; 
         } 

         return result; 
        }]; 


return orderedList; 
}