Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.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
Ios 使用NSPredicate时获取零记录_Ios_Swift_Core Data - Fatal编程技术网

Ios 使用NSPredicate时获取零记录

Ios 使用NSPredicate时获取零记录,ios,swift,core-data,Ios,Swift,Core Data,每次我使用NSPredicate从CoreData获取记录时,我总是得到零记录或根本没有记录。以下是我的功能: func get_facility(company: String, territory: String){ print("company: " + company) print("territory: " + territory) var appDel:AppDelegate = (UIApplication.sharedApplica

每次我使用NSPredicate从CoreData获取记录时,我总是得到零记录或根本没有记录。以下是我的功能:

func get_facility(company: String, territory: String){
        print("company: " + company)
        print("territory: " + territory)
        var appDel:AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
        var context:NSManagedObjectContext = appDel.managedObjectContext

        let companyPredicate = NSPredicate(format: "company LIKE %@", company)
        let territoryPredicate = NSPredicate(format: "territory LIKE %@", territory)
        let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [companyPredicate, territoryPredicate])
        let fetchRequestFacility = NSFetchRequest(entityName:"Facility")

        fetchRequestFacility.predicate = predicate

        do {
            let facility_temp = try context.executeFetchRequest(fetchRequestFacility)
            facility = facility_temp as! [Facility]
            c = facility_temp.count
            print(c)
            tableview_facility.reloadData()
        } catch let error as NSError {
            // failure
            print("Fetch failed: \(error.localizedDescription)")
        }

    }
当我注释掉行
fetchRequestFacility.predicate=predicate
时,它会显示我的所有记录。“公司”和“地区”字段的类型为字符串

我还尝试将LIKE关键字更改为==和=。但我还是没有记录

公司
=1和
地区
=1的可能值。这些是数字,但具有字符串数据类型。以下是我的设施实体的结构:

我想我找到了罪魁祸首,当我打印公司和地区的价值观时,我得到:

company: Optional(1)
territory: Optional(1)

当我尝试这个谓词:
让companyPredicate=NSPredicate(格式:“company='1'”)
时,我能够获取记录。可能是因为变量公司和地区有可选字符串。我不知道如何移除它。我试过放!到我的变量,但仍然相同。

您必须向我们显示
公司
地区
的值以及数据库中的值。请注意
类似于
使用通配符-搜索的值必须等于实体值,可能带有
*
。也许您想使用
包含
?您还可以直接使用谓词
NSPredicate(格式:“territory LIKE%@或company LIKE%@”,territory,company)
给出一个或两个您在谓词中使用的字符串示例以及您希望匹配的结果。从您目前发布的内容来看,最有可能的答案是没有匹配项,这就是为什么结果为零。请显示
设施
实体的类定义:如果
公司
属性是一种关系,您需要指出谓词应该比较的相关对象的哪个属性:例如,让companyPredicate=NSPredicate(格式:“company.name LIKE%@”,company)
会将company
name
属性与提供的字符串进行比较。我认为您的问题不在这里,而是在将company和territory传递给函数的方式上。如果打印它们并得到可选值(1),它们是
String
而不是
String?
意味着当调用函数时,公司内部的值已经是“可选(1)”。可能是因为将可选Int转换为字符串。那么,您如何阅读公司和地区,如何将它们传递给职能部门?