我有一个模型:
Place:
title
address
category <--->> Category:
title
我希望有一个表格视图,其中部分作为类别名称,但能够根据地点标题进行搜索。现在,为仅具有与某些指定 searchText 匹配的类别和标题的表视图获取一组数据的最佳方法是什么?我目前将结果放在 NSDictionary 中,但它似乎效率不高。特别是在执行删除类型操作时 - 我遇到了很多问题。目前我正在执行以下操作,但更愿意直接返回 FetchedResultsController。
+ (NSMutableDictionary *)getDictionaryResultsInContext: (NSManagedObjectContext *)context
forSearchText: (NSString *)searchText {
NSFetchRequest *req = [NSFetchRequest fetchRequestWithEntityName:@"Place"];
if(![searchText isEqualToString:@""] && searchText != nil){
req.predicate = [NSPredicate predicateWithFormat:@"(category.name CONTAINS[cd] %@) OR (placeTitle CONTAINS[cd] %@) OR (details CONTAINS[cd] %@)", searchText, searchText, searchText];
NSLog(@"ModelHelper.getResults: Search text given, creating predicate: %@", req.predicate);
}
req.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"placeTitle"
ascending:YES
selector:@selector(localizedCaseInsensitiveCompare:)]];
NSFetchedResultsController *controller = [[NSFetchedResultsController alloc]initWithFetchRequest:req
managedObjectContext:context
sectionNameKeyPath:nil
cacheName:nil];
NSError *error = nil;
[controller performFetch:&error];
if (error) {
NSLog(@"- Model Search ERROR: %@ (%@)", [error localizedDescription], [error localizedFailureReason]);
}
NSLog(@"- Got results: %i", [controller.fetchedObjects count]);
NSMutableDictionary* ret = [[NSMutableDictionary alloc]init];
for(Place* obj in controller.fetchedObjects){
if(obj != nil){
NSManagedObjectID* categoryId = obj.category.objectID;
if(categoryId != nil){
NSMutableArray* ary = (NSMutableArray*)[ret objectForKey:categoryId];
if(ary == NULL){
ary = [[NSMutableArray alloc]init];
[ret setObject:ary forKey:categoryId];
}
[ary addObject:obj];
}
else {
// Shouldnt happen
NSLog(@"- Category was nil.");
}
}
else {
// Shouldnt happen
NSLog(@"- Place was nil.");
}
}
return(ret);
}