2011-06-27 56 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; 
}