NSPredicate一对多关系

我怎样才能找到所有有超过10项子类别? 我使用下面的代码,但我得到“多到​​多按键这里不允许”。

我需要使用子查询?

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Categories"]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY subcategories.items > 0"]; [request setPredicate:predicate];

帮帮我! :)

--------------解决方案-------------

根据我的经验,你应该改变在谓语格式字符串

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY subcategories.items > 0"];

@"ANY subcategories.items > 0"

@"subcat[email protected] > 0"

请注意,任何关键字需要去为好,否则你会被查询属性的错误的方式。

在你NSPredicate你应该使用[email protected] >0代替。

Sorr,那如果大类,小类疫情周报人们只工作 - 到一个。

说真的,你应该做的,是删除所有的子类别至极没有任何项目,我想。

比土特产品应该只是检查是否有任何子类别,这将意味着他们不是空的。 [email protected] >0

您只能使用一个SQL后端一个一对多的关系。 这将做到这一点,但你必须“返回链接”加入到一组有序的(如果您在使用排序维持秩序 - 和独特性,因为你可能会得到多个子回指向同一类别)。 不理想,但也不差,考虑到限制。

// Search for all subcategories with item count > 0
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Subcategory"];
request.predicate = [NSPredicate predicateWithFormat:@"[email protected] > 0"];
NSError *error = nil;
// They should have an inverse relationship to their category...
// We have to iterate and insert them in to a set, but there is no additional
// disk access.
NSMutableOrderedSet *results = [NSMutableOrderedSet orderedSet];
[[self.projectDatabase.managedObjectContext executeFetchRequest:request error:&error] enumerateObjectsUsingBlock:^(Subcategory *obj, NSUInteger idx, BOOL *stop) {
[results addObject:obj.category];
}];

编辑

不幸的是,我不认为这是可能的SQL存储。 首先,我要强调,我不是在任何地方接近一个SQL专家,我通常会尽量让这些类型的查询是没有必要的设计我CoreData商店。 但是,以下SUBQUERY工作用InMemory商店,所以这是一个有些正确格式化子查询。

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(subcategories, $s, [email protected] > 0)[email protected] > 0"];

但是,使用SQL存储时,上游给出了一个错误。 该文档不说,有限制的相当数量的使用与SQL存储谓词的时候,所以我既不惊讶,也不打算花太多的更多的时间研究这个。

含有KVC骨料那里不应该有一个的keyPath; 未能处理$ s.items。@计

分类:IOS 时间:2015-03-16 人气:5
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.609 (s). 10 q(s)