2014-06-12 15 views
13

Tôi có một "bảng" có khả năng có nhiều bản ghi, khi thêm bản ghi mới, tôi cần biết có bao nhiêu bản ghi đã có trong bảng hiện tại khi tôi sử dụng nó để tính một số giá trị. Điều gần nhất tôi có thể tìm được yêu cầu tất cả các mục như thế này:Bản ghi số CloudKit

var query : CKQuery = CKQuery(recordType: "Stars", predicate: NSPredicate(format: "mass > 0")) 
    var request : CKQueryOperation = CKQueryOperation(query: query) 
    var starCount = 0 

    request.queryCompletionBlock = { 
     (cursor:CKQueryCursor!, error:NSError!) in 
     if error { 
      completionHandler(ECOResponse.error(error.description), starCount) 
     } else { 
      completionHandler(ECOResponse.ok(), starCount) 
     } 
    } 

    request.recordFetchedBlock = { 
     (record:CKRecord!) in 
     starCount += 1 
    } 

Tôi muốn queryCompletionBlock đã đưa ra một số hoặc kết quả mảng cùng với CKQueryCursor, nhưng tiếc là nó không.

Có cách nào khác để tính số lượng hàng trong bảng không?

+0

Bạn có thể muốn hỏi điều này trên diễn đàn Apple Developer. Tôi cho rằng thông tin này vẫn ở chế độ riêng tư theo thỏa thuận của Nhà phát triển Apple. –

+0

Rất tiếc, không có nhiều cuộc thảo luận xảy ra ở đó liên quan đến CloudKit. –

Trả lời

9

Không, bạn không thể nhận tổng số hồ sơ tuân thủ truy vấn của mình. Cũng bằng cách liệt kê kết quả câu trả lời có thể sai. Số lượng bản ghi được trả về bởi CloudKit không cố định. CloudKit có một cơ chế để quyết định số lượng bản ghi sẽ trả về. Có thể thiết lập điều này thành một số cố định trên đối tượng CKQueryOperation. Giá trị mặc định là:

operation.resultsLimit = CKQueryOperationMaximumResults; 

Các tài liệu cho thuộc tính này nói:

Khi sử dụng giá trị đó, máy chủ chọn một giới hạn đó nhằm cung cấp một số lượng tối ưu của kết quả trả về càng nhiều hồ sơ càng tốt đồng thời giảm thiểu độ trễ khi nhận các bản ghi đó. Tuy nhiên, nếu bạn biết rằng bạn muốn xử lý một số kết quả cố định, hãy thay đổi giá trị của thuộc tính này cho phù hợp.

Nếu số của bạn giống như số cố định này, thì có thể có nhiều bản ghi hơn truy vấn của bạn được trả về.

+2

Đôi khi khi sử dụng hằng số này (tức là 0 theo cách này) tôi gặp lỗi malhal

+3

Đôi khi, nếu bạn yêu cầu 1000 và không thành công, nếu bạn sử dụng con trỏ và giới hạn là 100 để nhận tất cả 1000. Nếu sau đó bạn cố gắng và nhận được tất cả 1000 lần nữa trong một lần thì nó thành công! Vì vậy, các máy chủ phải được bộ nhớ đệm và cho phép giới hạn lớn hơn nếu các hồ sơ trong bộ nhớ cache. – malhal

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