2013-04-10 94 views
1

我需要取我的數據庫並按ID排序。因此,例如,我有2列在數據庫,database_id和內容。當我NSLOG最後一行時,我得到「內容」列的所有行。但我需要根據數據庫標識1,2,3,4,5,6(升序)對這些「內容」行進行排序。幫幫我 ???核心數據排序請求

NSFetchRequest *request = [[NSFetchRequest alloc] init]; 

    NSEntityDescription *ent = [NSEntityDescription entityForName:@"databaseName" inManagedObjectContext:self.managedObjectContext]; 
    [request setEntity:ent]; 

    NSSortDescriptor *srt = [NSSortDescriptor sortDescriptorWithKey:@"database_id" ascending:YES]; 

    [request setSortDescriptors:[NSArray arrayWithObject:srt]]; 

    NSError *error; 
    NSArray *result = [self.managedObjectContext executeFetchRequest:request error:&error]; 

    if (!result) 
    { 
     //error 
    } 
    NSMutableArray *myArray = [[NSMutableArray alloc] initWithArray:[result valueForKey:@"content"]]; 
+0

你的代碼與排序描述符看起來不錯。什麼不工作? – 2013-04-10 11:06:44

+0

排序很好,但我遇到了NSString/Number的問題。 database_id會像1,11,15,2,3,5 .... – user1832330 2013-04-10 12:28:02

回答

3

你​​被存儲爲一個字符串,因此ID被分類爲字符串:

1, 11, 15, 2, 3, 5 

最好的解決辦法是存儲在​​爲一個數字(例如,「整型32」)數據庫 。

作爲一種變通方法,你可以保持你的字符串,並在 排序描述符中使用特殊的比較功能:

NSSortDescriptor *srt = [NSSortDescriptor sortDescriptorWithKey:@"database_id" 
       ascending:YES 
        selector:@selector(localizedStandardCompare:)]; 

localizedStandardCompare做了「查找類似」比較。特別是,包含 數字的字符串按其數值排序。

+0

然後將「內容」(這是另一個數據庫列)也取決於哪個id屬於哪個內容或僅僅id將被排序? – user1832330 2013-04-10 12:44:01

+0

@ user1832330:'result'數組根據id進行排序,因此內容列也根據id排序。所以它應該像你期望的那樣工作。 – 2013-04-10 12:47:39

+0

非常感謝,將測試它,然後看看會發生什麼。 – user1832330 2013-04-10 12:48:41