1

我的核心數據問題是NSFetchedResultsController。我在父母和子女實體之間有一對多的關係。 childFetchedResults.fetchedObjects屬性中的數組不是按number排序的(數字是模型中的int32屬性)。如果我使用MagicalRecord便利類別方法,似乎並不重要。NSFetchedResultsController在初始抓取時未排序

NSFetchRequest *req = [Child MR_requestAllSortedBy:@"number" ascending:YES withPredicate:[NSPredicate predicateWithFormat:@"parent = %@", self.parent]]; 
childFetchedResults = [[NSFetchedResultsController alloc] initWithFetchRequest:req managedObjectContext:[NSManagedObjectContext MR_defaultContext] sectionNameKeyPath:nil cacheName:nil]; 
childFetchedResults.delegate = self; 
NSError *error; 
[childFetchedResults performFetch:&error]; 
NSLog(@"fetched objects: %@", childFetchedResults.fetchedObjects); 

不過,如果我使用完全相同的排序描述符獲取對象的數組排序,它工作正常:

NSLog(@"fetched objects: %@", [childFetchedResults.fetchedObjects sortedArrayUsingDescriptors:[NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"number" ascending:YES]]]); 

我猜你只能用比較其核心數據可以傳遞到SQLite存儲在爲獲取請求指定排序描述符時。但是我覺得在這種情況下這應該不重要,因爲通過數字排序必須得到SQLite的支持。

任何人解決了這個問題?我覺得這與這裏描述的問題類似:NSSortDescriptor not being called

至於MR_requestAllSortedBy,它在MagicalRecord,這裏是實現:

+ (NSFetchRequest *) MR_requestAllSortedBy:(NSString *)sortTerm ascending:(BOOL)ascending inContext:(NSManagedObjectContext *)context 
{ 
    NSFetchRequest *request = [self MR_requestAllInContext:context]; 

    NSSortDescriptor *sortBy = [[NSSortDescriptor alloc] initWithKey:sortTerm ascending:ascending]; 
    [request setSortDescriptors:[NSArray arrayWithObject:sortBy]]; 

    return request; 
} 
+0

提供'[兒童MR_requestAllSortedBy代碼:@「號」升:是withPredicate: [NSPredicate predicateWithFormat:@「parent =%@」,self.parent]];'。那麼,爲什麼首先先用兩個不同的描述符(首先按數字,然後按日期)排序?你能否提供關於你的模型的更多信息?謝謝。 –

+0

對不起。它是兩個數字,複製粘貼問題。該模型有兩個實體,父項和子項。 Parent與Child有一對多的關係。 Child上的number屬性只是一個保存顯示順序的屬性 - 子項可以通過tableview編輯進行重新定義。 – ehope

+0

- 將此問題移至 – ehope

回答

0
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc]init]; 
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"RemainderDataBase" inManagedObjectContext:[self managedObjectContext]]; 
    NSSortDescriptor *nameSort = [[NSSortDescriptor alloc]initWithKey:@"title" ascending:YES]; 
    NSArray *sortDescriptor = [[NSArray alloc]initWithObjects:nameSort, nil]; 
    fetchRequest.sortDescriptors = sortDescriptor; 
    NSPredicate *p1=[NSPredicate predicateWithFormat:@"startdate > %@", [NSDate date]]; 
    [fetchRequest setPredicate:p1]; 
    [fetchRequest setEntity:entity]; 

我認爲你正在尋找上述代碼..