मैं अपने ऐप में क्लाउडकिट का उपयोग डेटा को दूरस्थ रूप से जारी रखने के तरीके के रूप में कर रहा हूं। मेरे रिकॉर्ड में से एक में एक सीकेएसेट संपत्ति है जिसमें एक छवि है। जब मैं रिकॉर्ड ला रहा हूं, मुझे एहसास हुआ कि क्वेरी को समाप्त करने में इतना समय लग रहा है। कई परीक्षणों के बाद, मैंने निष्कर्ष निकाला कि जब आप रिकॉर्ड पूछते हैं, क्लाउटकिट रिकॉर्ड ऑब्जेक्ट के साथ संपूर्ण संपत्ति फ़ाइल डाउनलोड करता है। इसलिए, जब आप रिकॉर्ड ऑब्जेक्ट से संपत्ति प्राप्त करते हैं और इसके fileURL का अनुरोध करते हैं, तो यह आपको एक स्थानीय फ़ाइल पथ यूआरएल देता है, न कि HTTP प्रकार का यूआरएल। यह मेरे लिए मुद्दा है क्योंकि क्वेरी को समाप्त होने से पहले उपयोगकर्ता को पूरे रिकॉर्ड डाउनलोड करने के लिए इतना समय इंतजार करना होगा (उनकी संबंधित छवियों के साथ)। एक पार्स पृष्ठभूमि से आ रहा है, पार्स आपको HTTP यूआरएल देने के लिए प्रयुक्त होता है और क्वेरी एसिंक लोड करते समय ऑब्जेक्ट्स के साथ यूआई लोड करने के लिए पर्याप्त तेज़ है। मेरा सवाल यह है कि मैं पार्स क्या हासिल कर सकता हूं? मुझे क्वेरी डेटा को डाउनलोड करने से प्रश्नों को प्रतिबंधित करने और छवियों को अतुल्यकालिक रूप से लोड करने के लिए एक लिंक प्राप्त करने की आवश्यकता है।डेटा डाउनलोड किए बिना सीकेएसेट यूआरएल प्राप्त करना
उत्तर
उसी रिकॉर्ड के लिए दो अलग-अलग कॉल करें। पहले कॉल को आपके द्वारा प्राप्त सभी गैर-संपत्ति फ़ील्ड प्राप्त करना चाहिए, और फिर दूसरा अनुरोध आवश्यक संपत्तियां प्राप्त करना चाहिए।
कुछ की तरह:
let dataQueryOperation = CKQueryOperation(query: CKQuery(predicate: myPredicate)
dataQueryOperation.desiredKeys = ["name", "age"] // etc
database.addOperation(dataQueryOperation)
let imageQueryOperation = CKQueryOperation(query: CKQuery(predicate: myPredicate)
imageQueryOperation.desiredKeys = ["images"]
database.addOperation(imageQueryOperation)
अगर जरूरत, एक विधि में इस refactor ताकि आप आसानी से हर संपत्ति युक्त क्षेत्र के लिए एक नई CKQueryOperation बना सकते हैं।
मुबारक शिकार।
अन्य लोगों की तरह कहा है कि आप सीकेएसेट के यूआरएल (वेब) नहीं प्राप्त कर सकते हैं। तो आपके सर्वोत्तम विकल्प हैं 1. प्रति व्यक्ति UIImageView के साथ प्रगति के साथ एक fetch ऑपरेशन का उपयोग करें। मैंने एक कस्टम बनाया है जो उपयोगकर्ता को प्रगति दिखाता है। कैश शामिल नहीं है लेकिन आप कक्षा बना सकते हैं और एनएससीओडी को अपनाने और पूरे रिकॉर्ड को कैश निर्देशिका में सहेज सकते हैं। यहां आप एक fetch देख सकते हैं कि मैं संपत्ति को वापस भेजने के लिए पूरा कर रहा हूं जहां मैं इसे अपने अन्य डेटा के साथ गठबंधन करने के लिए कहता हूं।
// only get the asset in this fetch. we have everything else
देना आपरेशन = CKFetchRecordsOperation (recordIDs: [myRecordID])
operation.desiredKeys = ["GameTurnImage"]
operation.perRecordProgressBlock = {
record,progress in
dispatch_async(dispatch_get_main_queue(), {
self.progressIndicatorView.progress = CGFloat(progress)
})
}
operation.perRecordCompletionBlock = {
record,recordID,error in
if let _ = record{
let asset = record!.valueForKey("GameTurnImage") as? CKAsset
if let _ = asset{
let url = asset!.fileURL
let imageData = NSData(contentsOfFile: url.path!)!
dispatch_async(dispatch_get_main_queue(), {
self.image = UIImage(data: imageData)
self.progressIndicatorView.reveal()
})
completion(asset!)
}
}
}
CKContainer.defaultContainer().publicCloudDatabase.addOperation(operation)
अन्य विकल्प एक एडब्ल्यूएस सर्वर या कुछ और तुलनीय पर छवियों को स्टोर करने के लिए है और फिर आप सब करने के लिए SDWebImage की तरह कुछ का उपयोग कर सकते कैश या भारी उठाने और सीकेआरकॉर्ड में छवि में एक स्ट्रिंग को बचाने के लिए।
मैंने कई लोगों को एक यूआरएल का पर्दाफाश करने के लिए सीकेएसेट सुविधा के बारे में पूछा है। मुझे क्लाउडकिट के लिए जेएस एपी के बारे में पता नहीं है लेकिन इसके साथ ऐसा करने का एक तरीका हो सकता है लेकिन मैं दूसरों को उस पर आगे बढ़ने दूंगा।
आप संपत्ति के यूआरएल तक पहुंचने के लिए क्लाउडकिट जावास्क्रिप्ट का उपयोग कर सकते हैं। यहाँ एक उदाहरण है;
(Alamofire और SwiftyJSON प्रयुक्त)
func testRecordRequest() -> Request {
let urlString = "https://api.apple-cloudkit.com/database/1/" + Constants.container + "/development/public/records/query?ckAPIToken=" + Constants.cloudKitAPIToken
let query = ["recordType": "TestRecord"]
return Alamofire.request(.POST, urlString, parameters: ["query": query], encoding: .JSON, headers: nil)
}
JSON उत्तर संपत्ति के लिए एक "downloadURL" शामिल हैं।
"downloadURL": "https://cvws.icloud-content.com/B/.../${f}?o=AmVtU..."
"$ {f}" एक चर की तरह लगता है तो इसे अपनी पसंद के अनुसार बदलें।
let downloadURLString = json["fields"][FieldNames.image]["value"]["downloadURL"].stringValue
let recordName = json["recordName"].stringValue
let fileName = recordName + ".jpg"
let imageURLString = downloadURLString.stringByReplacingOccurrencesOfString("${f}", withString: fileName)
और अब हम एक NSURL बनाने के लिए इस urlString का उपयोग करेगी और किंगफिशर के रूप में, HanekeSwift आदि किसी भी छवि & कैश समाधान के साथ उपयोग कर सकते हैं (आप छवि प्रकार पीएनजी/जेपीजी भी सहेजना चाहते हैं)
बहुत बढ़िया चाल @anilgoktas, मुझे संदेह है, [Keys.image] क्या है? – drdrdrdr
@drdrdrdr [Keys.image] -> रिकॉर्ड प्रकार पर छवि का फ़ील्ड नाम। आप इसे क्लाउडकिट डैशबोर्ड पर देख सकते हैं। यह उलझन में था, बस इसे बदल दिया। धन्यवाद – anilgoktas
@anilgoktas यह अनुरोध 'serverErrorCode = "AUTHENTICATION_REQUIRED" लौटाता है; "' लॉगिन वेबपृष्ठ पर redirectURL के साथ। आपने इसे कैसे दूर किया? –
- 1. इसे डाउनलोड किए बिना जीमेल अटैचमेंट फ़ाइल नाम प्राप्त करें
- 2. पूरी फ़ाइल को डाउनलोड किए बिना s3 से ogg ट्रैक की लंबाई प्राप्त करना
- 3. इसे डाउनलोड किए बिना टीएफएस शाखा हटाएं
- 4. रेल में 0 के बिना छवि यूआरएल प्राप्त करना
- 5. अन्य सभी फ्रेमों को डाउनलोड किए बिना एक जीआईएफ छवि का पहला फ्रेम प्राप्त करना
- 6. ताज़ा किए बिना यूआरएल में पैरामीटर जोड़ना
- 7. जीडब्ल्यूटी। सबमिट किए बिना यूआरएल सेट करें
- 8. अपनी सभी संपत्तियों को प्रदान किए बिना कतार प्राप्त करना
- 9. प्रतिक्रिया प्राप्त किए बिना cUrl अनुरोध कैसे करें?
- 10. पूरी फ़ाइल को डाउनलोड किए बिना ID3 टैग पढ़ें
- 11. PHP - वर्तमान यूआरएल प्राप्त करना
- 12. मैं एनाकोंडा पैकेज को "इंस्टॉल" किए बिना कैसे डाउनलोड करूं?
- 13. पहले से डाउनलोड किए गए डेटा तक पहुंच
- 14. HttpContext.Current का उपयोग किए बिना यूआरएल होस्टनाम का निर्धारण करें?
- 15. 'डेटा: टेक्स्ट/सादा' यूआरएल
- 16. Android एप्लिकेशन में डेटाबेस से डेटा प्राप्त किए बिना कर्सर डेटा कैसे बनाएं?
- 17. डाउनलोड किए बिना एस 3 पर फ़ाइल का आकार जांचें?
- 18. सभी फ़ाइलों को डाउनलोड किए बिना phpStorm ftp
- 19. घुमाव के बिना जिथब से एक टैरबॉल डाउनलोड करना
- 20. एक exe डाउनलोड कैश करने के लिए फ़ायरफ़ॉक्स प्राप्त करना
- 21. डेटा फॉर्म प्राप्त करें बाहरी यूआरएल क्लाइंटसाइड
- 22. मैं पूरी फ़ाइल को डाउनलोड किए बिना गिटहब एपीआई से "शा" पैरामीटर कैसे प्राप्त करूं?
- 23. ऑब्जेक्ट प्राप्त किए बिना s3 मेटाडेटा प्राप्त करें
- 24. जीएई कार्य कतार यूआरएल को उचित रूप से सुरक्षित करना (app.yaml का उपयोग किए बिना)
- 25. Django: यूआरएल में डेटा सहित बिना यूआरएल प्रेषक से देखने के लिए डेटा पास?
- 26. क्या रूबी मणि को स्वचालित रूप से इंस्टॉल किए बिना डाउनलोड करना संभव है?
- 27. nginx rewrite बिना यूआरएल
- 28. नेट फ्रेमवर्क 4 एसडीके डाउनलोड यूआरएल?
- 29. बाहरी डाउनलोड किए गए पीएनजी पर आईफोन ऑप्टिमाइज़ेशन करना
- 30. विंडो के बिना कीबोर्ड ईवेंट प्राप्त करना
कोई http url नहीं है। आप केवल एक स्थानीय यूआरएल प्राप्त कर सकते हैं। नीचे दिए गए उत्तर की तरह आप संपत्ति के बिना डेटा पूछने में सक्षम हैं। –