我的核心數據問題是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;
}
提供'[兒童MR_requestAllSortedBy代碼:@「號」升:是withPredicate: [NSPredicate predicateWithFormat:@「parent =%@」,self.parent]];'。那麼,爲什麼首先先用兩個不同的描述符(首先按數字,然後按日期)排序?你能否提供關於你的模型的更多信息?謝謝。 –
對不起。它是兩個數字,複製粘貼問題。該模型有兩個實體,父項和子項。 Parent與Child有一對多的關係。 Child上的number屬性只是一個保存顯示順序的屬性 - 子項可以通過tableview編輯進行重新定義。 – ehope
- 將此問題移至 – ehope