2015-02-05 15 views
12

काम नहीं कर रहा है मैं स्विफ्ट में एपीआई के साथ काम करने के बारे में जानने की कोशिश कर रहा हूं। एक अच्छा पहला परीक्षण के रूप में, मैंने सोचा कि मैं आईट्यून्स एपीआई हिट करूंगा और कुछ खोज परिणामों को वापस कर दूंगा। मैं निम्नलिखित कोड का उपयोग कर खेल के मैदान में हूं। मुझे कोई त्रुटि नहीं मिलती है, लेकिन मेरा println कुछ भी आउटपुट नहीं कर रहा है। किसी को पता है कि क्या गलत है?स्विफ्ट में HTTP अनुरोध

धन्यवाद!

import UIKit 
import XCPlayground 

XCPSetExecutionShouldContinueIndefinitely() 


let url = NSURL(string: "https://itunes.apple.com/lookup?id=909253") 

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
    println(NSString(data: data, encoding: NSUTF8StringEncoding)) 
} 

task.resume() 
+1

मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन खेल का मैदान समवर्ती कार्यों में एक सा ही सीमित है। इसे एक सरल appdelegate में आज़माएं। –

+0

जैसा नाट नीचे बताता है, एक खेल के मैदान में अपने कोड का उपयोग करके मुझे एक त्रुटि मिलती है। 'Https' के बजाय' http' का उपयोग करना, हालांकि यह सभी अपेक्षित के रूप में काम करता है। मेरा अनुमान है कि खेल के मैदान में https में कुछ विफलता के साथ इसका कुछ संबंध है, शायद पर्याप्त चीजें स्वचालित रूप से कॉन्फ़िगर नहीं होती हैं। –

+0

@ डेविड मैंने इसे http के साथ आजमाया लेकिन अभी भी कोई पासा नहीं है। मैंने कंसोल में देखा और मैं इसे देख रहा हूं: 2015-02-05 14: 26: 35.440 मायप्लेग्राउंड [16591: 718022] पथ =/var/फ़ोल्डर्स/zf/vnqxfh0d1mqfggy11rs3mc1sxvfpzn/टी/कॉम के लिए सैंडबॉक्स एक्सटेंशन प्राप्त करने में विफल .apple.dt.Xcode.pg/कंटेनर/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-06DB641A-E22C-41A4-A4C6-9D32890615D0/Library/Caches/com.apple.dt.playground.stub.iOS_Simulator .MyPlayground-06DB641A-E22C-41A4-A4C6-9D32890615D0। Errno: 1 2015-02-05 14:26:35।441 माईप्लेग्राउंड [16591: 718022] – user2874270

उत्तर

0

सुनिश्चित नहीं हैं कि तुम क्यों एक नहीं देख रहे हैं त्रुटि मैं इस मिल:

NSURLConnection/CFURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9807)

आप के साथ और अधिक प्रभावी ढंग परीक्षण कर सकते हैं httpbin.org-यह मेरे लिए पूरी तरह से काम करता है:

let url = NSURL(string: "http://httpbin.org/get") 

let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in 
    println(NSString(data: data, encoding: NSUTF8StringEncoding)) 
} 

task.resume() 
+0

पर ले जाएं धन्यवाद, मैंने कोशिश की, लेकिन अब कंसोल में मुझे यह त्रुटि दिखाई देती है: 2015-02-05 14: 26: 35.440 मायप्लेग्राउंड [16591: 718022] सैंडबॉक्स प्राप्त करने में विफल पथ =/var/फ़ोल्डर्स/zf/vnqxfh0d1mqfggy11rs3mc1sxvfpzn/टी/com.apple.dt.Xcode.pg/कंटेनर/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-06DB641A-E22C-41A4-A4C6-9D32890615D0 के लिए एक्सटेंशन /Library/Caches/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-06DB641A-E22C-41A4-A4C6-9D32890615D0। Errno: 1 – user2874270

+2

एक्सकोड को पुनरारंभ करने का समय! –

4

निम्नलिखित पंक्ति का प्रयास करें और मुझे लगता है कि यह काम करेगा:

XCPlaygroundPage.currentPage.needsIndefiniteExecution = true 
0

मेरा उत्तर सही नहीं है, यह वास्तव में केवल playgound indefinitite पृष्ठ निष्पादन में है। सत्र प्रकार कोई फर्क नहीं पड़ता।

हाल ही में एक ही समस्या में चलाएं और एक समाधान मिला।

त्रुटि URLSession.shared() का उपयोग करके होती है जो स्पष्ट रूप से एक खेल के मैदान सैंडबॉक्स में अनुमति नहीं है।

बनाएँ और बजाय अपने खुद के अल्पकालिक यूआरएल सत्र का उपयोग करें:

let session = URLSession(configuration: URLSessionConfiguration.ephemeral)

+1

नहीं, 'URLSession.shared()' Playground में बहुत अच्छी तरह से काम करता है, मैं इसे हर समय उपयोग करता हूं। आपको 'XCPlayground' या' PlaygroundSupport' के साथ एसिंक्रोनस मोड में प्लेग्राउंड सेट करना होगा। – Moritz

+0

अजीब। इसे फिर से जांचने के बाद, यह मेरे लिए साझा सत्र के साथ भी काम करता है। आंकड़े जाओ ... मुझे यकीन है कि यह पहले नहीं था। – jezovec

+0

खेल के मैदान बहुत सुविधाजनक हैं लेकिन बहुत स्थिर नहीं हैं, शायद आपके पास पहले कोई समस्या थी। – Moritz

26

कोड की इस पंक्ति जोड़ने का प्रयास करें:

URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil) 
+0

यह मेरे लिए काम किया है, धन्यवाद! –

+1

मेरी इच्छा है कि यह बनाया गया था ... यह भी कि मैं ओएसएक्स पर खेल के मैदान की किताबें पढ़ सकता था लेकिन यह न तो यहां और न ही वहां है। –

11

स्विफ्ट 3 कोड:

<!-- language: lang-c --> 

import PlaygroundSupport 
PlaygroundPage.current.needsIndefiniteExecution = true 
21

स्विफ्ट 3/एक्सकोड 8.2.1 के लिए, कुछ उत्तरों के संयोजन (आरवी 1331, वाउटर वैन जुइलेन) ने खेल के मैदान में कोई त्रुटि नहीं होने के साथ सर्वश्रेष्ठ परिणाम दिए। मैं इस स्विफ्ट 3 बाकी उदाहरण उपयोग कर रहा हूँ:

http://mrgott.com/swift-programing/30-work-with-rest-api-in-swift-3-and-xcode-8-using-urlsession-and-jsonserialization

import PlaygroundSupport 
import Foundation 

PlaygroundPage.current.needsIndefiniteExecution = true 
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil) 
+2

मुझे पता है कि यह देर हो चुकी है, लेकिन धन्यवाद, थाई – Will

+1

मेरे लिए सबसे अच्छा जवाब –

संबंधित मुद्दे