天道酬勤,学无止境

nspredicate

NSPredicate 中 ALL 、 ANY 和 SOME 运算符之间的区别(Difference between ALL , ANY and SOME operators in NSPredicate)

问题 我真的很难理解这三个。看起来ANY和SOME做同样的事情,但我看不出与ALL的区别。 回答1 让我们有一个组列表。 每个组都有person类型的成员。 每个人都有一个年龄。 所有会员。年龄 > 30 意味着您会找到一个成员都超过 30 岁的小组。您不会找到至少一个成员年龄在 30 岁或以下的小组。 任何会员。年龄 > 30 意味着您会找到至少一个成员超过 30 岁的小组。您不会找到所有成员都在 30 岁或以下的小组。 Group1 > 30 Amin 45 YES Chris 29 NO --- All NO (because Chris is too young) Any YES (because Amin is old enough) Group2 > 30 Amin 45 YES Foo 35 YES --- All YES (because all members are old enough) Any YES (because at least one member is old enough) Group3 > 30 Chris 29 NO Bar 21 NO --- All NO (because at least one member is too young) Any NO (because all members are too young) 有了 ALL

2021-09-20 19:23:57    分类:技术分享    objective-c   cocoa   core-data   nspredicate

NSPredicate 使用 RLMResults 作为参数(NSPredicate using RLMResults as an argument)

问题 我试图通过使用 NSPredicate 进行过滤来获取两组 Realm 数据(并且是不同的对象)之间的差异,但是有一个我无法理解的错误。 我的代码: RLMResults *topStories = [KFXTopStory allObjects]; NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NONE threadId = %@.topStoryId", topStories]; RLMResults *objectsToDelete = [KFXThread objectsWithPredicate:predicate]; 错误: *** Terminating app due to uncaught exception 'Invalid predicate', reason: 'Predicate with ANY modifier must compare a KeyPath with RLMArray with a value' 该查询似乎表明必须将键路径与值进行比较,而不是与另一个键路径进行比较。 Realm 甚至可以进行这种类型的查询吗? 看起来应该是这样,那么我哪里出错了? 对此或更好的解决方案的任何帮助都会很棒 - 谢谢! 编辑: 当然,在我发布这个之后,我得到了一些有效的东西。

2021-09-17 05:57:33    分类:技术分享    ios   nspredicate   realm

显示核心数据:如果属性同名显示一次(Displaying Core Data: If attribute has same name display once)

问题 我已经查看了许多谓词问题,我已经阅读了文档,但似乎没有什么可以作为我的问题的答案。 我有一个名为Materials的 Core Data 实体,我有 Attributes category 、 subcategory和description 。 我有三个UITableViewControllers ,在每个我想使用一个谓词来显示如下: TableViewController 1:只有类别(类别名称不重复) 选择一个类别并转到 TableViewController 2。 TableViewController 2:显示子类别(不重复子类别名称) 选择一个子类别并转到 TableViewController 3,列出该类别和子类别中的所有项目。 如果不在核心数据模型中使用三个实体,我可以这样做吗? 我曾尝试在我的fetchedResultsController方法中使用以下谓词代码,但fetchedResultsController : Materials * materials = [[Materials alloc]init];//this doesn't feel like it belongs inside a fetchedResultsController NSPredicate * predicate = [NSPredicate

2021-09-16 13:53:18    分类:技术分享    ios   objective-c   core-data   nspredicate   predicate

在 SWIFT 中过滤字符串数组的谓词抛出错误,指出 NSCFString 不是键值编码(Predicate to filter array of strings in SWIFT throws error saying NSCFString is not key-value coding)

问题 下面是我的代码片段 //Search Bar Delegate func searchBar(searchBar: UISearchBar, textDidChange searchText: String) { println(searchText) var predicate:NSPredicate=NSPredicate(format: "SELF CONTAINS[c] \(searchText)")! self.listItemToBeDisplayed=listItem.filteredArrayUsingPredicate(predicate) (self.view.viewWithTag(1) as UITableView).reloadData() } 我得到的错误: *** 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[<__NSCFString 0x17405ef90> valueForUndefinedKey:]:此类不符合密钥 V 的键值编码。” 我想过滤数组中的字符串以通过我的搜索字符串进行过滤。 如果我的搜索字符串包含在数组中的任何字符串中,那么它应该被列出。 回答1 NSPredicate(format:)强烈希望与 printf 样式的格式字符串一起使用(它在插入参数时自动引用参数等)。 您正在使用

2021-09-15 18:36:57    分类:技术分享    arrays   swift   nsarray   nspredicate

NSPredicate 在 NSFetchedResultsController 中表现得很奇怪(NSPredicate acting strange in NSFetchedResultsController)

问题 我觉得这应该很简单,但它的行为很奇怪。 我有 3 个实体,具有这样的关系 实体 A <-->> 实体 B <<--> 实体 C 我有一个 NSFetchedResults 控制器,我正在尝试使用以下谓词过滤实体 A 的结果。 [NSPredicate predicateWithFormat:@"NONE entityB.entityC == %@", self.entityC]; 当我尝试运行该应用程序时,输出未显示任何结果。 我可以将谓词稍微更改为: [NSPredicate predicateWithFormat:@"ANY entityB.entityC == %@", self.entityC]; 它只向我显示我希望它过滤掉的结果。 为什么会这样? 回答1 我想你可能想要一个 SUBQUERY 表达式: @"SUBQUERY(entityB, $x, $x.entityC == %@).@count == 0" 不过,它可能会起作用: @"NOT (ANY entityB.entityC == %@)" (注意:我还没有测试第二个选项)

2021-09-14 01:04:16    分类:技术分享    iphone   core-data   nspredicate   nsfetchedresultscontroller

核心数据。 使用常量文字作为属性名称的 NSPredicate 问题(Core data. NSPredicate issue using constant literals as names of properties)

问题 我有NSManagedObject的属性。 假设一个属性是: @property (retain, nonatomic) NSString *city; 为了从核心数据中获取数据,我总是使用NSPredicate 。 谓词如下所示: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"city", @"San Francisco"]; 但是这里的问题是该项目使用键“城市”作为未定义键,其含义类似于常量。 所以让我们假设我在我的应用程序中使用了 1000 次键“city”,所以如果 NSManagedObject 的属性被更改,例如更改为 cityName,我需要用新键替换所有这些键。 在这种情况下,我需要使用谓词: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"cityName", @"San Francisco"]; 这不舒服。 所以现在我正在使用 global extern NSString key kCity = @"city"; 但是如果数据模型也发生了变化,就会出现问题,因为如果属性发生变化,我只会在运行应用程序时崩溃,控制台会说我: 'key path city not

2021-09-13 16:56:02    分类:技术分享    ios   core-data   nspredicate

NSPredicate - 带参数的动态谓词(NSPredicate - Dynamic predicate with arguments)

问题 我是 NSPredicates 的新手,但我知道基础知识。 这就是我的谓词现在的样子: [NSPredicate predicateWithFormat:@"name contains[c] %@", searchText]; 我想要做的是能够创建这样的谓词(伪代码): NSPredicate *myPredicate = [NSPredicate predicateWithBaseString:@"name contains[c] _ARGUMENT_"]; 然后在例如循环中使用它(伪代码): for(NSString *searchString in self.allStrings) { NSPredicate *myNewPredicate = [myPredicate predicateWithArgument:searchString]; //Here I do the searchOperations with my new predicate } 我想这样做,以便我可以有一些基本谓词,然后在它们上放置参数以进行搜索。 我不想再次创建我的谓词。 希望你明白。 谢谢! 回答1 使用以下 NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"name contains[c] $ARGUMENT"]

2021-09-13 13:24:28    分类:技术分享    ios   core-data   nspredicate

如何解决 NSPredicate 错误“不能将 in/contains 运算符与集合 8(不是集合)一起使用”(how to solve NSPredicate error 'Can't use in/contains operator with collection 8 (not a collection))

问题 我试图根据初始查询的情绪来预测我的核心日期,所有情绪都设置为 8。我将每秒从 0 - 7 调用以更新 tableview。 但我得到了 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Can't use in/contains operator with collection 8 (not a collection)' 我应该使用 CONTAINS 还是其他运算符来谓词? NSString* filter = @"%K CONTAINS[cd] %@"; NSPredicate *getMoodPred = [NSPredicate predicateWithFormat:filter, @"mood", mood]; NSLog(@"getmood %@",getMoodPred); //getmood mood CONTAINS[cd] "7" NSArray *getMoodArray = [[VPPCoreData sharedInstance]allObjectsForEntity:@"Song" orderBy:Nil filteredBy:getMoodPred]; 回答1 这可能意味着mood属性存储为数字,而不是字符串。 “CONTAINS

2021-09-13 05:06:49    分类:技术分享    ios   iphone   objective-c   nspredicate

具有子对象属性的 NSPredicate 过滤器对多(NSPredicate filter to-Many with child object property)

问题 我有我认为是一个简单的问题。 我试图过滤一些核心数据,其中我有一个与子对象有一对多关系的父对象,并且该子对象有一个字符串 id。 我想获取所有没有子对象具有特定 id 的父对象。 我已经尝试过!(ANY... LIKE)以及!(ANY..==)和NONE with like and == 和ALL children.id != otherid 我的查询看起来像: NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Parent"]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"NONE children.id LIKE %@",otherID]; [fetchRequest setPredicate: predicate]; NSError* error; NSArray* allParents = [[DataManager context] executeFetchRequest:fetchRequest error:&error]; //sanity check the predicate for (Parent* p in allParents) { for (Child* c in p

2021-09-13 04:19:04    分类:技术分享    ios   objective-c   core-data   nspredicate

具有子对象属性的 NSPredicate 过滤器对多(NSPredicate filter to-Many with child object property)

问题 我有我认为是一个简单的问题。 我试图过滤一些核心数据,其中我有一个与子对象有一对多关系的父对象,并且该子对象有一个字符串 id。 我想获取所有没有子对象具有特定 id 的父对象。 我已经尝试过!(ANY... LIKE)以及!(ANY..==)和NONE with like and == 和ALL children.id != otherid 我的查询看起来像: NSFetchRequest* fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Parent"]; NSPredicate* predicate = [NSPredicate predicateWithFormat:@"NONE children.id LIKE %@",otherID]; [fetchRequest setPredicate: predicate]; NSError* error; NSArray* allParents = [[DataManager context] executeFetchRequest:fetchRequest error:&error]; //sanity check the predicate for (Parent* p in allParents) { for (Child* c in p

2021-09-13 04:17:51    分类:技术分享    ios   objective-c   core-data   nspredicate