2015-05-13 157 views
1

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

回答

3

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

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

來源:Predicates Syntax (developer.apple.com) 從文檔:

格式字符串支持printf風格格式說明如%×(見格式字符串對象)。兩個重要的格式說明符是%@%K

  • %@是對象值通常是一個字符串,數字或日期變種ARG取代。

  • %K是關鍵路徑的var arg替換。