Tag: nspredicate

如何使用链式虚拟财产的NSPredicate?

假设两个由Sqlite支持的ManagedObject: 1.)具有两个属性的User , firstname和lastname以及只读的虚拟(临时)属性fullname 。 @interface User : NSManagedObject … @property NSString *firstname; @property NSString *lastname; @property (readonly) NSString *fullname; @end @implementation User … – (NSString*)fullname { return [NSString stringWithFormat:@"%@ %@", self.firstname, self.lastname]; } @end 2.)除了几个其他属性之外,还有一个Message与一个存储在sender属性中的用户有关系。 @interface Message : NSManagedObject @property User *sender; @end 我想用特定发件人的全名来获取消息的所有实例。 这是我正在构build的NSPredicate: [NSPredicate predicateWithFormat:@"sender.fullname CONTAINS[cd] %@", @"Searched Name"]] 不幸的是,一旦我开始search,我得到一个NSInvalidArgumentException : *** […]

如何形成谓词从核心数据中获取包含来自数组的string元素的对象

我需要创build一个谓词来从核心数据中获取对象,我的实体“Form”看起来像这样: @interface EEForm (CoreDataProperties) @property (nullable, nonatomic, retain) NSDate *date; @property (nullable, nonatomic, retain) NSString *descriptor; @property (nullable, nonatomic, retain) NSString *location; @property (nullable, nonatomic, retain) NSMutableSet<Participants *> *participants; 实体“参与者”看起来像这样: @interface Participants (CoreDataProperties) @property (nonatomic, assign) NSInteger indexRow; @property (nullable, nonatomic, retain) NSString *participant; @property (nullable, nonatomic, retain) EEForm *form; 我想在参与者字段的基础上获取对象,该字段包含来自给定数组的所有对象(该数组由string对象组成,并且依赖于用户select的内容而变化)。 获取请求由FetchResultController执行。 我在初始化中设置谓词。 我是这样做的,但它包含了所有包含给定数组中至less一个对象的对象。 – […]

iOS NSPredicate不工作?

我有一个简单的谓词函数,如下所示: [totalSentences addObjectsFromArray:[firstLangEx filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(SELF contains[c] %@)", cellText]]]; 这条线在我的一个应用程序中工作,但是当我将其复制到另一个应用程序并尝试testing时,它不起作用。 totalSentences is a global NSMutableArray firstLangEx is a local NSArray filled with several lines cellText is NSString *cellText = cell.textLabel.text; 所有这些代码存在于我原来的应用程序和工作。 它们在方法中实现- (void)tableView:(UITableView *)tableView1 didSelectRowAtIndexPath:(NSIndexPath *)indexPath 即使cellText与firstLangEx中的一个string匹配,totalSentences也不会被任何字符填充。 什么可能导致这个? 编辑: 在NSLog totalSentences总是显示没有内容,与始终显示至less一行的原始应用程序的输出相反。 firstLangEx始终具有从文本文件加载的正确内容(在两个应用程序中文件都是相同的) cellText总是显示至less一个string。 (我在两个应用程序中testing相同的string。) 所以我不知道为什么totalSentences总是空的,至less应该填充一个匹配所有cellTextstring的string。 编辑: 我也以编程方式向totalSentences添加了一些string,可变数组运行良好。 任何想法为什么发生这种情况 编辑: 我已经testing了yuji的build议: BOOL ok; NSPredicate *predicate = [NSPredicate […]

有没有什么办法使用NSPredicate来过滤CoreData中点之间的距离计算对象

例如,我有NS和X和Y双值的NSManagedObject。 我想得到位于距离提供的一段距离的点的列表。 我试图用下一个谓词: [NSPredicate predicateWithFormat:@“(x-%f) (x-%f) – (y-%f) (y-%f)<=%f”,point.x,point.x,point.y,point .y,25 * 25]。 但是由于某种原因,它不起作用:((。 在我的实验中,我发现,即使x大于1,(x-1)* 2-x> = 0的谓词也会返回0个对象,(x + 1)* 2-x> = 0会返回所有对象。 所以我怀疑谓词中的计算是不被支持的,但是在我看来,没有关于它的任何信息

核心数据performance:对更多对多关系的预测

使用SQL数据存储,我有这样一个模型: 类别< – >>项目 collections< – >>项目 品牌< – >>项目 每个左侧的实体都有一个多对多的关系,这个关系命名为Item到Item实体。 每一个分别与一个项目关系类别 , 收集 品牌和品牌相反。 我想用至less一个与特定集合和类别相关的项目获取所有品牌对象。 在自然语言中,我需要具有特定类别和特定集合的所有品牌的商品。 给定对象Category * myCategory和Collection * myCollection ,我用这种方式在Brand实体上构build一个谓词: NSPredicate *myPredicate = [NSPredicate predicateWithFormat:@"(ANY items.category == %@) AND (ANY items.collection == %@)",myCategory,myCollection]; 我得到正确的结果。 问题是性能。 太慢了! 我简化了三个层次的问题! 我们来考虑iOS多级别目录中的四个级别:应用程序显示可用类别,用户select类别,应用程序显示该类别中的集合,用户select集合,应用程序显示该集合中的品牌(以及已select的类别),用户select一个品牌,该应用程序显示在该品牌,集合和类别的材料… 说实话,我使用NSCompoundPredicate把每个用户的select放在子类中,dynamic构build最终的谓词。 但这个问题的目的并不重要。 在sql数据存储中, Item实体有超过30,000个(30k)的对象,而使用AND之间的关系非常缓慢(在上面的例子中,我注意到7-10秒的滞后时间来显示品牌)。 我会尽力: – 从类别,collections品和品牌实体中删除物品关系 – 在物品实体上,将类别 , collections 品牌和品牌关系replace为“category_id”,“collection_id”和“brand_id”等属性上的提取属性。 – 使用关键path或谓词来获取品牌而不使用多对多的关系。 […]

用NSPredicate过滤NSArray

我想过滤一个User对象的数组( User有fullname , user_id和一些更多的属性..)根据firstName或lastName开始一些string。 我知道如何根据一个条件过滤: NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word]; NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate]; 这将给我所有的用户,有一个firstName以“单词”开头。 但是如果我想让所有具有以“word”开头的firstName或lastName的用户呢?

获取时,托pipe对象具有不同的ID

即时通讯与Coredata工作,有一个概念,我没有得到; 我有2个托pipe对象ACConversation和ACMessages与一对多的关系,所以我保存一个消息相关联的对话,并试图获取他们回来的基础上: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.conversation = %@", self.conversation]; 但与对象关联的ID是不同的(它似乎更多的是一个内存地址),并与上述谓词不提取任何东西: 2013-01-01 18:32:13.727 CoreDataTest[9325:c07] The message to fetch: <NSManagedObject: 0x818f680> (entity: ACMessage; id: 0x8160630 <x-coredata:///ACMessage/t451CC5A3-5972-479C-BC7C-6B91CA4DA23C4> ; data: { conversation = "0x818b770 <x-coredata:///ACConversation/t451CC5A3-5972-479C-BC7C-6B91CA4DA23C2>"; sentDate = "2013-01-01 23:32:13 +0000"; text = "Test message to Fetch through relationship!!!"; }) 2013-01-01 18:32:13.728 CoreDataTest[9325:c07] The conversation associated to the message: […]

核心数据。 NSPredicate问题使用常量文字作为属性的名称

我有NSManagedObject属性。 假设它是一个属性: @property (retain, nonatomic) NSString *city; 对于从核心数据获取数据,我总是使用NSPredicate 。 谓词如下所示: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"city", @"San Francisco"]; 但这里的问题是项目使用键“城市”作为未定义的关键在像一个常数的意义。 因此,假设我在我的应用程序中使用了“城市”键1000次,那么如果NSManagedObject的属性发生更改,例如cityName,则需要用新的键replace所有这些键。 在这种情况下,我需要使用谓词: NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", @"cityName", @"San Francisco"]; 这不舒服。 所以现在我使用全局extern NSString key kCity = @"city"; 但如果数据模型也发生了变化,则会出现问题,因为如果属性将被更改,那么只有在运行应用程序和控制台会对我说: 'key path city not found in entity <NSSQLEntity… 哪种解决方法可以在这里? 我以为使用类似的东西 NSString * const kCity […]

NSArray的NSArray中的对象的属性的NSPredicate

我有一个像下面的结构的对象:事务有一个项目的数组。 Item有一个SubItems数组 @interface Transaction : NSObject @property (nonatomic, copy) NSString *id; @property (nonatomic, assign) NSInteger status; @property (nonatomic, strong) NSArray *items; // array of Item @end @interface Item : NSObject @property (nonatomic, copy) NSString *identifier; @property (nonatomic, assign) NSInteger price; @property (nonatomic, strong) NSArray *subitems; @end @interface SubItem : NSObject @property (nonatomic, copy) NSString *name; […]

如何删除具有相同的属性值,但在NSMutableArray中的一个对象

我有一个URLstring属性和标题的历史对象。 我想search包含searchstring的url的所有历史logging,然后删除所有重复项。 例如:我有一组历史对象,其中20个都是“ https://www.google.com ”,4个是“ https://www.google.com/#q=search ”,我想要只有一个对象的url值为“ https://www.google.com ”,一个url值为“ https://www.google.com/#q=search ”的数组返回 这是我当前的代码,它search历史logging并返回匹配string的所有对象: – (NSArray *)historyObjectsContainingQuery:(NSString *)query { NSMutableArray *matchingObjects = [[NSMutableArray alloc] init]; HistoryManager *HM = [HistoryManager sharedInstance]; for (int i=0; i<[[HM history] count]; i++) { //History "days" HistoryObject *historyItem = HistoryObject([[HistoryManager sharedInstance] history][i]); for (int o=0; o<[historyItem.objects count]; o++) { //Each object inn each […]