나는 다음 두 가지를 모두 시도했습니다 NSPredicate
.
let predicate = NSPredicate(format: “personID == %lld", id)
let predicate = NSPredicate(format: “personID == %d", id)
SQL 로깅을 활성화하고 SQL 쿼리 끝에 다음을 확인했습니다.
WHERE t0.ZPERSONID = ?
변수보기에서 id
값은 Int64(156)
이지만 대신에 넣은 내용에 관계없이 id
결과 SQL 쿼리에는 t0.ZPERSONID = ?
WHERE 절이 있습니다. 이 때문에 술어는 쓸모없고 매번 중복 레코드 삽입이 발생합니다. 어떻게 얻 t0.ZPERSONID = 156
습니까?
WHERE t0.ZPERSONID = ?
준비된 진술의 (일부)입니다. 매개 변수가 바인딩 된 값을 확인하려면 Core Data 디버깅 수준을 3으로 설정합니다 ( Core Data 디버그 값을 인쇄하는 방법 비교 ? ) :
-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.Logging.stderr 1
또한 print(predicate)
작성된 술어의 정확성을 확인하는 데 유용합니다.
귀하의 경우 문제는 NSNumber
인스턴스를 인수로 전달하지만 %lld
형식은 Int64
.
다음으로 변환 할 수 있습니다 NSNumber
.Int64
let id = NSNumber(value: Int64(156))
let p1 = NSPredicate(format: "personID == %lld", id.int64Value)
print(p1) // personID == 156
또는 더 간단한 경우 %@
대신 형식을 사용하십시오.
let p2 = NSPredicate(format: "personID == %@", id)
print(p2) // personID == 156
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다