核心数据搜索具有相同值的属性

时间:2014-06-01 05:41:02

标签: ios core-data nspredicate

我有一个核心数据db,其属性如" size"和"文件名"在实体"文件"。

我想编写一个谓词,它将在db中搜索并返回具有相同" size"的元素。属性和"名称"属性,以获取所有重复文件的列表(假设两个或多个具有相同名称和相同大小的文件是确实相同的良好候选者)。

我认为这将是一个超级简单的谓词,但无法找到正确陈述的参考。

这是我到目前为止所做的,但效率非常低(O(n2)),因为它使用fetchedResultController.fetchedObjects而不是在sqllite数据库上进行搜索和过滤。

records = [_fetchedResultsController.fetchedObjects count];
 for (int i = 0; i < records - 1; i++) { 
        NSIndexPath *indexI = [NSIndexPath indexPathForRow:i  inSection:0];
        NSManagedObject *objecti = [self.fetchedResultsController objectAtIndexPath:indexI];

        for (int j = i+1; j < records; j++) {
            NSIndexPath *indexJ = [NSIndexPath indexPathForRow:j inSection:0];
            NSManagedObject *objectj = [self.fetchedResultsController objectAtIndexPath:indexJ];

            if ([[objecti valueForKey:@"filename"] isEqualToString: [objectj valueForKey:@"filename"]]
                && [[objecti valueForKey:@"sizeReadable"] isEqualToString: [objectj valueForKey:@"sizeReadable"]])
            {
                NSLog(@"Dupe found");
                NSLog(@"iDupe is %@", [objecti valueForKey: @"filename"]);
                NSLog(@"iDupe size is %@", [objecti valueForKey: @"sizeReadable"]);
                NSLog(@"jDupe is %@", [objectj valueForKey: @"filename"]);
                NSLog(@"jDupe is %@", [objectj valueForKey: @"sizeReadable"]);

            }

我确信谓词有更好的方法但无法找到它。

欢迎任何建议。 谢谢,       DOM

0 个答案:

没有答案