2015-02-01 6 views
7

जब CloudKit से आइटम लोड हो रहा है मैं निर्माण तिथि के आधार पर परिणामों ऑर्डर करने के लिए करना चाहते हैं। मुझे विश्वास है कि यह रिकॉर्ड की पहली संपत्ति द्वारा क्रमबद्ध है।CloudKit: निर्माण तिथि द्वारा आदेश क्वेरी परिणाम

func loadItems() { 
    let predicate = NSPredicate(value: true) 
    let query = CKQuery(recordType: "Items", predicate: predicate) 
    db.performQuery(query, inZoneWithID: nil) { (results, error) -> Void in 
     if error != nil { 
      println(error.localizedDescription) 
     } 

     dispatch_async(dispatch_get_main_queue()) {() -> Void in 
      items = results as [CKRecord] 
      self.tableView.reloadData() 
      println("items: \(items)") 
     } 
    } 
} 
+0

मैं मैं NSSortDescriptor उपयोग करने की आवश्यकता मान, लेकिन मैं मुझे यकीन नहीं है कि कैसे विशेष रूप से। – colindunn

+0

क्या यह करीब है? 'Query.sortDescriptors = NSSortDescriptor (कुंजी:" creationDate ", आरोही: सच)' – colindunn

उत्तर

15

यह मैं के लिए क्या देख रहा था है:

query.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)] 
+0

इस तरह के विपरीत क्रम में नहीं है? मुझे लगता है कि नीचे @ वोमाको द्वारा जवाब बेहतर है। – PKCLsoft

-1

आप एनएसपी्रेडिकेट का उपयोग कर सकते हैं। तुम सही थे।

let startDate = NSDate(timeInterval: -60.0 * 120, sinceDate: NSDate()) 
let predicate = NSPredicate(format: "creationDate > %@", startDate) 

लेकिन तुम तो क्वेरी करने कि आप उन्हें एक प्रश्न में उपयोग कर सकते हैं के लिए CloudKit में creationDate मैदान सक्षम करने के लिए किया है।

+0

हम्म, मैं कुछ गलत कर किया जाना चाहिए। यह अभी भी एक और संपत्ति द्वारा आदेश दे रहा है। मैंने 'दिनांक निर्मित' मेटाडेटा इंडेक्स के लिए क्वेरी और सॉर्ट दोनों सक्षम किए। – colindunn

+0

आप अपने 'predicate' चर जाने अद्यतन है? – Christian

+0

हाँ, पहले दो लाइनों इस तरह दिखेगा: 'जाने STARTDATE = NSDate (timeInterval: -60.0 * 120, sinceDate: NSDate()) देना विधेय = NSPredicate (प्रारूप:" creationDate>% @ ", STARTDATE)' – colindunn

11

यहाँ एक ऑब्जेक्टिव-सी समाधान है। यह स्विफ्ट में इसी प्रकार काम करता है।

CKError 0x12e874f10:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"TRUEPREDICATE"]; 
CKDatabase *privateDatabase = [self.myContainer privateCloudDatabase]; 
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"command" predicate:predicate]; 
query.sortDescriptors = [NSArray arrayWithObject:[[NSSortDescriptor alloc]initWithKey:@"creationDate" ascending:true]]; 
इस के साथ

, आपको निम्न त्रुटि संदेश मिल सकता है "अवैध तर्क" (12/2016); सर्वर संदेश = "फ़ील्ड '___createTime' क्रमबद्ध चिह्नित नहीं है"; UUID = 468AC2A4-24D6-4A56-81BB-6A2A8027DC15; कंटेनर आईडी = "iCloud.com.xxx"

तो, बस इसे डैशबोर्ड में sortable बनाने: enter image description here

+0

बूम! तुमने मेरी बग हल की। – Colas

+0

यह स्वीकार किए जाते हैं जवाब होना चाहिए, इस उत्तर के दूसरे भाग के लिए महत्वपूर्ण है। –

0

स्विफ्ट - 3,0

let recordInsertDate = records["creationDate"]! 
print("recordInsertDate : \(recordInsertDate)") 
let query = CKQuery(recordType: "className", predicate: NSPredicate(format: "creationDate >= %@ " , recordInsertDate as! CVarArg)) 
संबंधित मुद्दे