2015-01-07 14 views
8

Tôi đang bối rối về cách lưu một đối tượng có chứa một mảng các đối tượng khác trong CloudKit.Lưu một mảng các đối tượng trong CloudKit

Giả sử tôi có ứng dụng danh sách việc cần làm, có các bộ sưu tập các mục khác nhau. Làm thế nào tôi sẽ đi về tiết kiệm/lấy một bộ sưu tập toàn bộ các mặt hàng?

Tôi có một loại Bản ghi bộ sưu tập, thuộc tính chuỗi có tên "Tên" không, sau đó Thuộc tính danh sách tham chiếu được gọi là "Mục"?

Tôi biết rằng loại Bản ghi mục cần có Thuộc tính tham chiếu được gọi là "Bộ sưu tập", vì cách CloudKit tham chiếu từ đối tượng con đến đối tượng mẹ của nó.

tôi đã quản lý để tiết kiệm một Bộ sưu tập mà không cần bất kỳ trường hợp khoản với đoạn mã sau

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) 
     } 
    } 
} 

Các tùy chọn khác là khi tiết kiệm một Bộ sưu tập, để lặp qua tất cả các trường hợp của Item và cũng tiết kiệm những cá nhân, họ Tham chiếu thuộc tính cho Bộ sưu tập tạo kết nối ở phía CloudKit, nhưng điều này có vẻ như quá nhiều cuộc gọi mạng.

Trả lời

2

Đối với bản ghi Item bạn cần CKReference đến Collection. Sau đó, bạn sẽ có thể đặt một số CKReferenceAction trên đó. Bạn không cần phải tạo danh sách CKReference trên Collection.

Có một danh sách các đối tượng CKReference chỉ là một tùy chọn khi bạn đang có kế hoạch sử dụng CKReferenceAction.None Trong đó sẽ có nghĩa là không có một mối quan hệ chặt chẽ giữa hai recordTypes

Nếu bạn có một đối tượng Collection, sau đó bạn có thể dễ dàng truy vấn recordType Item bằng cách sử dụng biến vị ngữ kiểm tra xem CKReference có phải là của Collection hay không.

Thông thường không cần lưu nhiều bản ghi. Một khi bạn đã tạo một Bộ sưu tập với Các mục, quan hệ có thể không thay đổi. Nếu bạn cần thay đổi nhiều bản ghi, thì bạn có thể thử sử dụng CKModifyRecordsOperation có hỗ trợ để lưu nhiều mục trong một hành động.

Khi liên kết hiện tại Item recordTypes đến Collection, bạn cần lưu mỗi Item vì nó có CKReference cho Collecion. Item đã thay đổi, vì vậy nó phải được lưu lại.

+0

Bạn đảm bảo thứ tự các mặt hàng trong bộ sưu tập như thế nào? Tôi sợ rằng khi tìm nạp các mục, chúng sẽ đến theo thứ tự khác với khi chúng được lưu ... –

+0

Bạn có thể thêm thứ tự sắp xếp như sau: query.sortDescriptors = [NSSortDescriptor (key: "creationDate", tăng dần: false)] –

+0

Có nhưng tôi cần phải giữ thứ tự của mảng như được thiết lập bởi người sử dụng, không áp dụng một sắp xếp mỗi khi tôi lấy mảng. –

Các vấn đề liên quan