【问题标题】:Core data's managed object property as argument核心数据托管对象属性作为参数
【发布时间】:2015-05-13 20:18:22
【问题描述】:

AnyThe 第一条语句不返回任何值,而第二条语句正常工作。是否可以将属性名称指定为参数之一以避免硬编码?

let predicate = NSPredicate(format: "%@ == %@", "id","553178666d61d70c24fe4221")

let predicate = NSPredicate(format: "id == %@", "553178666d61d70c24fe4221")

感谢@FreeNickname,这是一个完整的解决方案

  class func searchForObject(propertyName:NSString,property:NSString,className:String,single:Bool )->AnyObject?{
        let fetchRequest = NSFetchRequest(entityName: className)
        let predicate = NSPredicate(format: "%K == %@", argumentArray: [propertyName, property])
        var appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
        fetchRequest.predicate = predicate
          // Execute the fetch request, and cast the results to an array of LogItem objects
        var error:NSError?
        if let fetchResults = appDelegate.managedObjectContext!.executeFetchRequest(fetchRequest, error: &error) as [AnyObject]? {
            if let e = error{
                println(e.debugDescription)

            }

            if single {
                var object: AnyObject? = fetchResults.first

                return object;
            }
            else{
                return fetchResults
            }
        }
    return nil;
    }

【问题讨论】:

    标签: swift core-data nspredicate


    【解决方案1】:

    尝试使用%K 而不是%@ 作为属性名称。 像这样:

    let predicate = NSPredicate(format: "%K == %@", "id","553178666d61d70c24fe4221")
    

    来源:Predicates Syntax (developer.apple.com) 来自文档:

    格式字符串支持 printf 样式的格式说明符,例如 %x(请参阅格式化字符串对象)。两个重要的格式说明符是%@%K

    • %@ 是一个 var arg 替代对象值(通常是字符串、数字或日期)。

    • %K 是键路径的 var arg 替换。

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 2019-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-31
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多