簡體   English   中英

核心數據的托管對象屬性作為參數

[英]Core data's managed object property as argument

Any第一個語句不返回任何值,而第二個語句正常工作。 是否可以將屬性名稱指定為避免硬編碼的參數之一?

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;
    }

嘗試%K而不是%@作為屬性名稱。 像這樣:

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

來源: Predicates語法(developer.apple.com)來自文檔:

格式字符串支持printf樣式的格式說明符,例如%x(請參閱格式化字符串對象)。 兩個重要的格式說明符是%@%K

  • %@是對象值的var arg替換 - 通常是字符串,數字或日期。

  • %K是密鑰路徑的var arg替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM