2012-06-24 8 views
31

का उपयोग कैसे करें मैं एक आईफोन ऐप विकसित कर रहा हूं जो नेटवर्क का उपयोग करता है। आईफोन HTTP अनुरोध के माध्यम से मेरे सर्वर के साथ संवाद करता है और वाईफाई और 3 जी पर काम करना चाहिए।
मैं वर्तमान में NSURLConnection initWithRequest का उपयोग प्रतिक्रियाओं अपने सर्वर को async अनुरोध भेजने और प्राप्त करने के लिए (लेकिन मैं जल्द ही ASIHTTPRequest पुस्तकालय के साथ काम करने के लिए ले जाएगा)आईओएस रीचैबिलिटी

मैं समझ गया कि क्षुधा (क्षुधा है कि इंटरनेट कनेक्शन की आवश्यकता) इस तरह से मैं चाहिए (जरूरी है?) पहुंच योग्यता का उपयोग करें।

वेब की खोज और मैं अभी भी कुछ बुनियादी सामान समझ में नहीं आता एप्पल के गम्यता उदाहरण कोड को देखने के बाद:

गम्यता के मुख्य उद्देश्यों क्या है?

सेब के उदाहरण में वे मेजबान, वाई-फाई और 3 जी के साथ नेटवर्क समस्याओं का पता लगाने और एक उचित संदेश के साथ उपयोगकर्ता प्रस्तुत करते हैं।
क्या उपयोगकर्ता को एक संदेश दिखाने के लिए यह पहुंच का मुख्य उद्देश्य है? या क्या मुझे इसे और अधिक व्यावहारिक परिदृश्यों के लिए उपयोग करने की आवश्यकता है? उदाहरण के लिए यदि NSURLConnaction अनुरोध विफल रहा है तो क्या मुझे अनुरोध भेजने के लिए रीचैबिलिटी का उपयोग करने की आवश्यकता है?

गम्यता के समुचित उपयोग क्या है?

यह आम केवल एक उदाहरण उपयोग करने के लिए जब एप्लिकेशन लॉन्च, और फिर नेटवर्क परिवर्तन करने के लिए सुनो है? या क्या मुझे प्रत्येक नेटवर्क अनुरोध से पहले पहुंचने की स्थिति की जांच करनी चाहिए?
यह काफी reachabilityWithHostName का उपयोग करें या मैं भी reachabilityForLocalWiFi और reachabilityForInternetConnection जरूरत है ऐसा करने के लिए है?

एक और बात, मुझे समझ में आया कि सेब उन नेटवर्क को अस्वीकार कर सकता है जो नेटवर्क का उपयोग करते हैं और पहुंच योग्यता का उपयोग नहीं करते हैं।
"" क्या करना चाहिए तरीकों को लागू करना चाहिए?
क्या यह उपयोगकर्ता को सूचित करने के लिए पर्याप्त होगा कि वर्तमान में कोई इंटरनेट नहीं है?

उत्तर

43

Reachability एक नेटवर्क सहायक उपयोगिता वर्ग, अपने कनेक्शन की स्थिति

गम्यता के मुख्य उद्देश्यों क्या है के बारे में विभिन्न जानकारियां प्राप्त करने के लिए प्रयोग किया जाता है?

  • गम्यता जब कनेक्टिविटी में परिवर्तन

इस गम्यता का मुख्य उद्देश्य है, उपयोगकर्ता को दिखाने के लिए सूचित करने के लिए नेटवर्क स्थिति

  • और अपने श्रोताओं रजिस्टर करने के लिए क्वेरी करने के लिए प्रयोग किया जाता है एक संदेश?

  • निश्चित रूप से नहीं, इसका मुख्य उपयोग है या तो अगर वहाँ इंटरनेट कनेक्टिविटी है परीक्षण करने के लिए, या सूचना पाने के लिए अगर कनेक्टिविटी में परिवर्तन

    उदाहरण के लिए यदि NSURLConnaction अनुरोध विफल हो गया मैं का उपयोग करने की आवश्यकता है किसी भी तरह से अनुरोध भेजने के लिए पहुंच योग्यता?

    हाँ आप इसे इस्तेमाल कर सकते हैं, उदाहरण के लिए मैं क्या सामान्य रूप से अपने प्रोजेक्ट में क्या सभी अनुरोध है कि एक दूरस्थ सर्वर से किया गया है को बचाने के लिए है, मान लीजिए कि मैं 10 फ़ाइलों को डाउनलोड करना चाहते हैं,

    जब किसी भी फाइल कोई इंटरनेट कनेक्शन की वजह से डाउनलोड की प्रक्रिया विफल रहता है, मैं उन्हें विफल रहा है डाउनलोड की एक सरणी के लिए बचाने के लिए,

    जब गम्यता मुझे सूचित करता है कि इंटरनेट कनेक्शन बहाल कर दिया गया, मैं इस सरणी के माध्यम से पुनरावृति और डाउनलोड की प्रक्रिया फिर से शुरू

    पहुंच योग्यता का उचित उपयोग क्या है?

    यह निर्भर करता है, अपने पैटर्न और जरूरतों पर।

    ऐप लॉन्च होने पर केवल एक उदाहरण का उपयोग करना आम है, और फिर नेटवर्क परिवर्तनों के लिए सुनें?

    हाँ कि मैं क्या, अपनी परियोजनाओं में मैं केवल एक डाउनलोड प्रबंधक वर्ग के 1 उदाहरण है, और इस वर्ग के गम्यता के ही जीवित उदाहरण है

    या मैं अपने आप को गम्यता की जाँच करनी चाहिए प्रत्येक नेटवर्क अनुरोध से पहले स्थिति?

    आपको लगता है कि गम्यता कक्षाओं के कई उदाहरण बिना, मैं सामान्य रूप से क्या करना है, मेरे डाउनलोड प्रबंधक के अंदर एक विधि है कि मुझसे कहता है गम्यता का उपयोग कर अगर कोई कनेक्शन है या नहीं है कर सकते हैं।

    यह पर्याप्त उपयोग करने के लिए reachabilityWithHostName है या मैं भी reachabilityForLocalWiFi और reachabilityForInternetConnection की ज़रूरत है?

    Am यकीन है कि यह एक के बारे में नहीं है, लेकिन क्या मैं आमतौर पर करते हैं हर तरह पर कनेक्टिविटी का परीक्षण करने, मुझे नहीं 3G या वाईफ़ाई के बीच अंतर, लेकिन वहाँ कुछ कार्यान्वयन इस जानकारी (WiFi या 3G) हो सकता है कि कर रहे हैं उपयोगी

    +0

    आपके उत्तर के लिए धन्यवाद, क्या आप कृपया "एक और बात" की जांच कर सकते हैं जिसे मैंने – Eyal

    +1

    पर जोड़ा है, मुझे पूरी तरह से अनजान है, मेरे पास ऐपस्टोर पर 5+ ऐप्स हैं, वे सभी रीचैबिलिटी का उपयोग करते हैं, मैं पहुंच के रूप में उपयोग करता हूं उत्तर में ऊपर वर्णित है, इसलिए मुझे यह नहीं पता कि क्या कार्यान्वित किया जाना चाहिए, मैं सामान्य रूप से लागू करता हूं कि मुझे –

    +1

    की आवश्यकता है, आपने कहा कि पहुंच के मुख्य उद्देश्य में से एक है "कनेक्टिविटी में परिवर्तन करते समय सूचित करने के लिए अपने श्रोताओं को पंजीकृत करने के लिए", लेकिन यह करता है हर बार कॉलबैक न दें (राउटर स्विच करने और चेक करने का प्रयास करें)। –

    12

    Reachability एक उदाहरण परियोजना है कि एप्पल बना दिया है है। लोग इसे सिस्टम कॉन्फ़िगरेशन फ्रेमवर्क पर एपीआई के रूप में उपयोग करते हैं। जैसा कि आपने पहले ही देखा है कि यह जांचने के तरीके हैं कि कोई मेजबान पहुंच योग्य है या नहीं।

    तरह से मैं Reachabilty परियोजना का उपयोग है कि मैं एक वर्ग विधि है कि एक बूलियन लौटाता है यदि मेजबान मैं से डेटा का अनुरोध कर रहा हूँ उपलब्ध है के साथ एक वर्ग बना दिया है। तो यह तो है विधि रिटर्न YES और अगर ऐसा नहीं है, यह रिटर्न NO (जाहिर है)।

    अब, जहां मैं कनेक्शन का उपयोग कर रहा हूं, आपको ऐप्पल दस्तावेज के रूप में कनेक्शन शुरू करना संभव है या नहीं, इसकी जांच करनी चाहिए। मेरे पास एक साधारण if है और फिर एक उचित चेतावनी संदेश दिखाएं कि इस समय अनुरोध पूरा नहीं हो सका।

    कोई आवश्यकता नहीं है कि आप स्वचालित रूप से फिर से करता है, तो अनुरोध पहली बार नहीं किया जा सकता है की कोशिश करनी चाहिए रहे हैं। इसका मुख्य उद्देश्य अपने आवेदन को दुर्घटनाग्रस्त होने से दूर रखना है, और साथ ही उपयोगकर्ता को एक संदेश दें कि यह नहीं किया जा सका।

    मैं स्वयं अधिसूचनाओं का उपयोग नहीं करता, लेकिन ऐसा इसलिए है क्योंकि मुझे निगरानी में दिलचस्पी नहीं है कि कनेक्शन किया जा सकता है या नहीं। यह ऐसा कुछ है जिसे आपको अपने आवेदन की मांगों से तय करना होगा।

    आपको रीचब्लिटी कक्षा में सभी विधियों का उपयोग करने के लिए मजबूर नहीं किया जाता है, यह उनमें से एक का उपयोग करने के लिए पर्याप्त है। यह दस्तावेज है कि विभिन्न विधियों की पेशकश क्या होती है और जब वे हेडर फ़ाइल में उपयोग किए जाने का उल्लेख करते हैं।

    SystemConfiguration ढांचे को शामिल करना याद रखें।

    +0

    आपके उत्तर के लिए धन्यवाद, यह जांचते समय कि मेजबान प्रत्येक नेटवर्क अनुरोध से पहले उपलब्ध है या नहीं, क्या यह हर अनुरोध के लिए ओवरहेड जोड़ देगा? – Eyal

    +0

    हां, लेकिन यह न्यूनतम होना चाहिए। हालांकि मैंने इसे करने के किसी भी ध्यान देने योग्य उपरांत को नहीं देखा है। आपके द्वारा जोड़े गए प्रश्नों के लिए मैंने उत्तर दिया है कि पहले से ही मुझे लगता है। यह पूछने के लिए स्वतंत्र महसूस करें कि कुछ अभी भी अस्पष्ट है :) – Andreas

    +0

    तो मुझे बताएं कि क्या मैं सही समझता हूं, एक ही परिणाम प्राप्त करने के लिए, लेकिन अधिसूचनाओं के साथ, मैं कुछ वैश्विक बूलियन "होस्टआईज उपलब्ध" रखूंगा, जब मुझे मिल रहा है तो यह बूलियन अपडेट हो जाएगा पहुंचने की अधिसूचनाएं, फिर प्रत्येक नेटवर्क अनुरोध से पहले मैं जांच करूंगा कि यह हाँ है, अगर नहीं, तो मैं उपयोगकर्ता को एक चेतावनी संदेश दिखाऊंगा। – Eyal

    0

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

    यहाँ है कि मैं क्या के लिए Reachibility का उपयोग करें: मैं पुन: प्रयास शुरू करेंगे जब गम्यता एक परिवर्तन का पता लगाता, के बाद डाउनलोड विफल हो गया क्योंकि कोई इंटरनेट कनेक्शन था (वास्तव में कुछ ही सेकंड बाद में, यूआरएल का उपयोग अक्सर तुरंत विफल रहता है के बाद गम्यता कहते वाईफाई वापस आता है) । डाउनलोड के बाद विफल होने पर मोबाइल डेटा को अस्वीकार कर दिया गया था, जांचें कि मोबाइल डेटा उपलब्ध है या नहीं, तो उपयोगकर्ता को मोबाइल डेटा के उपयोग की अनुमति देने के लिए कहें।