2015-01-07 2 views
8

CloudKit에 다른 객체 배열이 포함 된 객체를 저장하는 방법에 대해 혼란스러워합니다.CloudKit에서 객체 배열 저장

다른 컬렉션이있는 할부 목록 앱이 있습니다. 전체 아이템 컬렉션을 저장/가져 오는 방법은 무엇입니까?

"이름"이라는 문자열 속성과 "항목"이라는 참조 목록 속성이있는 레코드 유형의 컬렉션이 있습니까?

RecordKit이 Child 객체에서 부모로 참조하는 방식 때문에 Item의 Record 유형에 "Collection"이라는 참조 속성이 있어야한다는 것을 알고 있습니다.

나는 항목의 모든 인스턴스를 통해 루프, 다음 코드

func addCollection(collection: Collection!, completion: (error: NSError!) ->()) { 
    if collection == nil 
     return 
    } 
    let collectionRecord = CKRecord(recordType: "Collection") 
    CollectionRecord.setObject(collection.name, forKey: "Name") 
    privateDB.saveRecord(collectionRecord) { 
     record, error in 
     dispatch_async(dispatch_get_main_queue()) { 
      completion(error: error) 
     } 
    } 
} 

다른 옵션은 컬렉션을 저장하여 항목의 인스턴스없이 컬렉션을 저장 관리하며, 개별적으로 사람들을 저장 한 자신의 Collection 속성을 참조하여 CloudKit 쪽에서 연결을 만들지 만, 너무 많은 네트워크 호출처럼 보입니다.

답변

2

Item 레코드의 경우 CKReference에서 Collection이 필요합니다. 그런 다음 CKReferenceAction을 설정할 수 있습니다. CollectionCKReference 목록을 만들 필요가 없습니다. CKReference 객체의리스트를 갖는

는 두 recordTypes 사이의 엄격한 관계가없는 것을 의미 어떤 CKReferenceAction.None를 사용하려는 경우에만 옵션입니다

당신이 Collection 객체를 가지고 있다면, 당신은 쉽게 할 수 CKReference가 Collection인지 확인하는 조건자를 사용하여 Item recordType을 쿼리하십시오.

일반적으로 여러 레코드를 저장할 필요가 없습니다. Items를 사용하여 Collection을 생성하면 관계는 변경되지 않습니다. 여러 레코드를 변경해야하는 경우 한 번의 작업으로 여러 항목을 저장할 수있는 CKModifyRecordsOperation을 사용해 볼 수 있습니다. CollectionItem recordTypes 기존 링크 할 때

, 당신은 그것이 Collecion에 CKReference을 가지고 있기 때문에 각 Item을 저장할 필요가 없습니다. Item이 변경되었으므로 저장해야합니다.

+0

컬렉션의 항목 순서를 어떻게 보장합니까? 나는 항목을 가져올 때 저장 될 때와 다른 순서로 도착할 것입니다 ... –

+0

다음과 같은 정렬 순서를 추가 할 수 있습니다 : query.sortDescriptors = [NSSortDescriptor (key : "creationDate", 오름차순 : false)] –

+0

네,하지만 배열을 가져올 때마다 정렬을 적용하지 않고 사용자가 설정 한대로 배열의 순서를 유지해야합니다. –