2014-07-07 11 views
18

tôi cần phải truy vấn tất cả các loại hồ sơ, mà không cần bất kỳ lọc. Tôi đã thử hai cách:Tôi làm cách nào để tạo một CKQuery không có biến vị ngữ?

let query = CKQuery(recordType: "Pm", predicate: nil) 
let query = CKQuery(recordType: "Pm", predicate: NSPredicate(format: "")) 

tôi bị lỗi:

'NSInvalidArgumentException', reason: 'Unable to parse the format string ""'

Làm thế nào để làm gì?

Trả lời

31

Bạn không thể thực hiện một truy vấn mà không có một vị ngữ, nhưng NSPredicate không có một phương pháp chỉ cho điều này, và trong Swift nó được sử dụng thông qua việc khởi tạo:

init(value: Bool) -> NSPredicate // return predicates that always evaluate to true/false 

Cách sử dụng như sau.

let predicate = NSPredicate(value: true) 
+0

hi mick bạn có biết nếu có một cách khác để viết cơ sở dữ liệu công cộng với tư cách là quản trị viên, để tạo và duy trì dữ liệu mà không cần đăng nhập icloud? đầy đủ câu hỏi: http://stackoverflow.com/questions/36808601/seed-and-maintain-cloudkit-public-database-still-requires-icloud-login – Crashalot

+0

Great câu trả lời, cảm ơn! –

+0

Theo tham chiếu API của CKQuery: "Các phần tử dựa trên chuỗi định dạng. Bạn không thể sử dụng các biến vị ngữ giá trị hoặc khối." Tôi không nghĩ nó luôn như thế này, nhưng hiện tại câu trả lời này không còn hoạt động nữa. –

19

Để có được tất cả hồ sơ của bạn, bạn sẽ cần phải sử dụng như vị cho CKQuery của bạn:

[NSPredicate predicateWithFormat:@"TRUEPREDICATE"] 

hoặc trong Swift:

NSPredicate(format: "TRUEPREDICATE") 

này có hiệu quả hoạt động giống như không có bất kỳ vị .

+2

này nên là chấp nhận trả lời – Yariv

+0

@ yar1vn Nếu bạn không nhớ chào bán của tôi, tại sao? Có sự khác biệt nào giữa phương pháp này và câu trả lời mà tôi không thấy? –

+3

Đây là giải pháp mà Apple khuyến nghị trong tài liệu. Có lẽ không có gì sai với câu trả lời của bạn nhưng đưa ra 2 giải pháp, một tài liệu nên được ưa thích – Yariv

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