Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 核心数据使用单个搜索字符串查询多个列_Iphone_Objective C_Cocoa Touch_Xcode_Core Data - Fatal编程技术网

Iphone 核心数据使用单个搜索字符串查询多个列

Iphone 核心数据使用单个搜索字符串查询多个列,iphone,objective-c,cocoa-touch,xcode,core-data,Iphone,Objective C,Cocoa Touch,Xcode,Core Data,我有一个简单的核心数据模型,有两个字符串属性size和category。给定像“小部件”这样的搜索字符串,是否可以返回将所有查询词与至少一个属性相匹配的记录,即具有“小部件”大小和“小部件”类别的所有记录?我目前有: NSString *search = @"small widget" NSPredicate *predicate = [NSPredicate predicateWithFormat:@"size contains[cd] %@ OR category contains[cd]

我有一个简单的核心数据模型,有两个字符串属性size和category。给定像“小部件”这样的搜索字符串,是否可以返回将所有查询词与至少一个属性相匹配的记录,即具有“小部件”大小和“小部件”类别的所有记录?我目前有:

NSString *search = @"small widget"
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"size contains[cd] %@ OR category contains[cd] %@", search, search];
...

这不会返回任何结果,因为没有类别或大小等于小部件。有什么建议吗?请注意,搜索字符串将由用户从文本字段中输入,并且可能以任何顺序出现,因此我无法手动拆分。

我尚未对其进行测试,但看起来您希望这样:

NSString *search = @"small widget";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%@ contains[cd] size AND %@ contains[cd] category", search, search];
搜索字符串是否包含大小和类别,您应该询问搜索字符串中是否包含当前大小或类别

您还可以拆分搜索字符串并修改谓词。你应该让他们确定哪个表现更好

NSString *search = @"small widget";
    NSArray *array = [search componentsSeparatedByString:@" "];
    NSMutableArray *subPredicates = [NSMutableArray array];
    for (NSString *q in array) {
        [subPredicates addObject:
         [NSPredicate predicateWithFormat:@"size contains[cd] %@ OR category contains[cd] %@", q, q]];
    }
    NSCompoundPredicate *predicate = [[[NSCompoundPredicate alloc] initWithType:NSAndPredicateType
                                                                 subpredicates:subPredicates] autorelease];

对于Swift,您可以使用propertiesToFetch获取多个列


对于第一个例子,当查询是“小部件”时,这不匹配“大部件”吗?同样,我认为第二个也有同样的问题。使用NSAndPredicateType而不是NSOrPredicateType如何?所以,你可以让size包含“small”或者category包含“small”,size包含“widget”或者category包含“widget”。正如我所说,我还没有测试过它。虽然我认为你是对的。在第一个示例中,我使用了and和,因此字符串应该包含两个组件才能为true,而在第二个示例中,NSAndPredicateType将完成这项工作。干杯,vfn
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "<YOUR ENTITY NAME>")
let predicate = NSPredicate(format: "<YOUR PREDICATE>")
fetchRequest.predicate = predicate
fetchRequest.resultType = .dictionaryResultType


// Here is where you can query multiple columns, you can add as much columns as you want and fetch them as an array of dictionaries
fetchRequest.propertiesToFetch = ["column1", "column2", "column3, "column4"]


let sort = NSSortDescriptor(key: "column1", ascending: false)
fetchRequest.sortDescriptors = [sort]