Mar*_*cal 2 xcode core-data nspredicate nsfetchrequest nsmanagedobject
我有一个CoreDataTableViewController的子类(由斯坦福大学的人做的UITAbleViewController圆的子类,用于链接CoreData和TableViews).在这个类上,我想执行一个fecth,通过一个名为"definition"的属性进行排序,执行它的代码如下:
- (void)setupFetchedResultsController{
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:self.entity];
request.propertiesToFetch=[NSArray arrayWithObject:@"definition"];
request.returnsDistinctResults=YES;
NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"%K != nil", @"definition"];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"%K != ''", @"definition"];
NSPredicate *predicate3= [NSPredicate predicateWithFormat:@"%K contains[cd] %@", @"definition", self.seachBar.text];
NSArray *prepredicateArray;
if ([self.seachBar.text length]) {
prepredicateArray = [NSArray arrayWithObjects:predicate1, predicate2, predicate3,nil];
}else {
prepredicateArray = [NSArray arrayWithObjects:predicate1, predicate2,nil];
}
request.predicate=[NSCompoundPredicate andPredicateWithSubpredicates:prepredicateArray];
request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"definition" ascending:YES ]];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
[self performFetch];
}
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,请设置request.returnsDistinctResults = YES; 应避免重复获取.但它不起作用,我看到这个属性值的重复.
那里有什么我想念的吗?我很欣赏那里的一些指点.先感谢您.
编辑:如果有人在这里遇到相同的问题,在应用David的答案后,生成的fetchedResultsController只是一个NSDIctionary,其对象只有请求的值,仅用于显示目的是非常好的.我在cellForRowAtIndexPath中为了在单元格标签上显示结果而做的一件事是:
之前:
HNMR *hnmr = [self.fetchedResultsController objectAtIndexPath:indexPath];
cell.textLabel.text=hnmr.definition;
Run Code Online (Sandbox Code Playgroud)
之后:
cell.textLabel.text=[[self.fetchedResultsController objectAtIndexPath:indexPath] valueForKey:@"definition"];
Run Code Online (Sandbox Code Playgroud)
Dav*_*ist 13
仅在已设置值时使用此值
propertiesToFetch.
来自以下文件propertiesToFetch:
仅当
resultType设置为时才使用此值NSDictionaryResultType.
来自以下文件resultType:
默认值为
NSManagedObjectResultType.
这一切都告诉我,propertiesToFetch忽略了因为你没有设置resultType自己,默认它返回托管对象而不是字典.由于propertiesToFetch被忽略returnsDistinctResults,因此也会被忽略,因此您仍然会获得重复项.
尝试设置结果类型以返回字典而不是托管对象.
request.resultType = NSDictionaryResultType;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6918 次 |
| 最近记录: |