2017-09-13 1 views
2

의 배열과 어떤 CloudKit의 조건 나는 CloudKitNSPredicateNSCompoundPredicate(orPredicateWithSubpredicates:)을 사용하려고하지만 나는 그래서이 함께 도로 블록에 충돌 OR 비교 술어가 CloudKit에서 지원되지 않는다는 애플의 문서를 참조하십시오.사용은 포함하거나 비교

Record-typeReference 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 
    } 
} 
+0

' "%의 @ IN TABLENAME", refs' :

여기 내 임시 방편이다? – Larme

+0

@Larme 참조는 REFERENCE_LIST 유형이므로 필터 유형 IN을 사용하여 쿼리 할 수 ​​없습니다. –

+0

분명히하기 위해,'tableName'은 CKReference의리스트를 나타내며, 다른 배열의 CKReference를 사용하여 두 배열의 비어 있지 않은 교차가 있는지를 알기 위해 술어를 만들고 싶습니다. 그 맞습니까? – rmaddy

답변

1
NSMutableArray * tagsReferencesArray = [[NSMutableArray alloc] init]; 

    [tagsReferencesArray addObject:tag100_Reference]; 
    [tagsReferencesArray addObject:tag300_Reference]; 
    [tagsReferencesArray addObject:tag200_Reference]; 

predicate= [NSPredicate predicateWithFormat:@"ANY %@ in field_TagsReferenceList ", tagsReferencesArray];