2014-12-20 2 views
3

Xcode 베타 버전에서 업데이트 한 후 동적으로 조건부 생성 및 컴파일 오류가 발생합니다. 어떤 생각인지. 행운과 CVarArgType valueForKey 결과를 캐스팅 시도했다.AnyObject를 입력 하시겠습니까? 프로토콜 CVarArgType을 준수하지 않습니까?

import UIKit 
import CoreData 

class User: NSManagedObject { 
    @NSManaged var a: String? 
    @NSManaged var b: String? 
} 


var user = User() // This will probably crash, but good enough to reproduce compile error 
var keys = ["a", "b"] 

for key in keys { 
    var predicate = NSPredicate(format: "%K == %@", key, user.valueForKey(key)) 
} 
+0

어디에서 오류가보고됩니까? 또한 적어도 오류를 재생산하는'keys'에 대해 가짜 선언을 할 수 있습니까? 또한 managedObject에 대한 위조 된 선언이 얼마나 훌륭한 지 알 수 있습니다. 사람들이 코드를 테스트하고 문제를 재현하는 것이 더 쉬울수록 (특히 놀이터에서) 더 나은 대답을 얻을 수 있습니다. – drewag

+0

술어의 속성 이름에 @Bluehound % @를 사용하면 안됩니다. – aryaxt

+0

@drewag 예외는 valueForKey 호출에 있습니다. 열쇠에 문자열 [ "property1", "property2"]이 배열되어 있다는 코드에 주석이 있습니다. – aryaxt

답변

3

문제는 managedObject.valueForKey(key)이 선택적 값을 반환한다는 것입니다. 당신은 먼저 값을 반환하는 것을 확인해야 할 것 같습니다

if let value = managedObject.valueForKey(key) { 
    var predicate = NSPredicate(format: "%K == %@", key, value) 
    predicates.append(predicate) 
} 

다른 문제는 당신이 매개 변수로 AnyObject을 통과하려고하는 것입니다. 또한 NSObject에 대한 선택적 캐스트를 if-let에 추가하면 컴파일러 오류가 수정되어야합니다.

if let value = user.valueForKey(key) as? NSObject { 
    var predicate = NSPredicate(format: "%K == %@", key, value) 
} 
+0

여전히 같은 문제입니다. 나는 또한 무력을 시도했으나 초 단위로 놀이터 코드를 제공 할 것이다. – aryaxt

+0

여전히 같은 컴파일 오류가 발생한다. Xcode의 최신 버전을 실행하고 있습니까? 최신 버전 – aryaxt

+0

@aryaxt로 업데이트 할 때까지 제 코드가 작동했습니다. 죄송합니다. 제 놀이터가 작동하고있었습니다. 또한 결과 값을 String으로 형변환해야합니다. 내 업데이트 답변을 참조하십시오. – drewag

관련 문제