直到最近,我一直在爲我的項目使用Core Data和In-Memory存儲。現在我正在嘗試切換到SQLite存儲,並面臨以下問題:核心數據:包含多對多關係的NSPredicate在使用SQLITE存儲類型時不會產生任何結果
當試圖使用謂詞和sortDescriptor從商店獲取對象時,我的fetchedResultsController返回0個對象。當存儲類型爲內存時,完全相同的代碼正常工作。
這是我想提出的獲取:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY %K == %@", @"categories", category];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES selector:@selector(caseInsensitiveCompare:)];
self.fetchedResultsController = [self createFetchedResultsControllerWithEntityName : @"Provider" sectionName : @"group" sortDescriptor : sortDescriptor predicate : predicate cache : nil];
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self.tableView reloadData];
,這是我創造的讀取請求:
- (NSFetchedResultsController *)createFetchedResultsControllerWithEntityName : (NSString*) entityName sectionName : (NSString*) sectionName sortDescriptor : (NSSortDescriptor*) sortDescriptor predicate : (NSPredicate*) predicate cache : (NSString*) cacheName{
// Create the fetch request for the entity.
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//set predicate
if (predicate)
[fetchRequest setPredicate:predicate];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext
sectionNameKeyPath:sectionName
cacheName:cacheName];
aFetchedResultsController.delegate = self;
[fetchRequest release];
[sortDescriptor release];
[sortDescriptors release];
return [aFetchedResultsController autorelease];
}
同樣,這非常相同的代碼讀取多對象時使用內存中的存儲,但使用SQLite時爲空的fetchedObjects數組。
我讀過Apple的文檔,介紹了在SQLite商店中使用謂詞和sortDescritors時需要特別注意的問題。我在謂詞中使用單一(多) - 多對多關係(類別),所以這應該沒問題?
從提取中返回沒有錯誤。根本沒有對象(fetchedResultsController.fetchedObjects爲空)。
任何指導將不勝感激。
感謝