의 배열과 어떤 CloudKit의 조건 나는 CloudKit
NSPredicate
와 NSCompoundPredicate(orPredicateWithSubpredicates:)
을 사용하려고하지만 나는 그래서이 함께 도로 블록에 충돌 OR
비교 술어가 CloudKit
에서 지원되지 않는다는 애플의 문서를 참조하십시오.사용은 포함하거나 비교
Record-type
이 Reference list
인 경우 참조 할 배열이 CKReferences
입니다.
completionBlock
에 중첩 된 쿼리를 피하려고하기 때문에 조건 자 자체를 어셈블하는 방법에 어려움을 겪고 있습니다. 어떻게 든 그것은 단지 전체 배열을 배열의 첫 번째 개체를 찾습니다, 그리고 있기 때문에,
let refs = [CKReference]() // in my case the array isn't empty
내가이 있지만 일을하지 않았다 다음 시도 :
의 내가 참조 다음과 같은 배열을 가정 해 봅시다 . 여기
let predicate = NSPredicate(format: "tableName CONTAINS %@", argumentArray: refs)
나는 predicate
그것이 인쇄 인쇄하는 경우 :
TABLENAME이 CKReference 포함되어 0x600000229c40을; 20B54862-46CC-405F-BAE8-0DC8D3A52F78 : (_ defaultZone : defaultOwner)>
당신이 볼 수 있듯이, 그것은 단지 배열의 첫 번째 개체를 찾습니다.
내가 술어에 ANY
연산자를 사용하는 경우이 작동, 뭔가 같은 :
let predicate = NSPredicate(format: "ANY { '%@', '%@' } = tableName", args: refs[0], refs[1])
그러나 여기 내 문제는 refs
배열은 동적이기 때문에 나는 그 술어를 구축 할 수있는 방법이며, 난 몰라 얼마나 많은 객체가 들어 있는지 알 수 있습니다. 따라서 refs
배열의 [0], [1], ...
에 액세스하는 predicate args
을 빌드하는 방법을 알지 못합니다.
해결 방법이 있습니까? 또는이 문제에 접근하는 가장 좋은 방법은 무엇입니까?
감사합니다.
편집
나는이 문제를 해결하는 방법을 알아 내려고하지만 가장 효율적인 하나의 경우 나도 몰라, 그래서 난 아직도 답변과 의견을 개설하고 있습니다.
이for (i, reference) in refs.enumerated() {
let predicate = NSPredicate(format: "tableName CONTAINS %@", reference)
// CKQuery
// CKQueryOperation
// Database.add(CKQueryOperation)
if i == refs.count - 1 {
// UPDATE UI
}
}
' "%의 @ IN TABLENAME", refs' :
여기 내 임시 방편이다? – Larme
@Larme 참조는 REFERENCE_LIST 유형이므로 필터 유형 IN을 사용하여 쿼리 할 수 없습니다. –
분명히하기 위해,'tableName'은 CKReference의리스트를 나타내며, 다른 배열의 CKReference를 사용하여 두 배열의 비어 있지 않은 교차가 있는지를 알기 위해 술어를 만들고 싶습니다. 그 맞습니까? – rmaddy