मैं अपने खुद के प्रश्न का उत्तर देता हूं। समाधान ढूंढने में मुझे थोड़ी देर लग गई और काफी निराशाजनक थी। यदि आप इंटरनेट खोज करते हैं तो आपको कुछ आंशिक उत्तर मिलते हैं, लेकिन मुझे अभी भी निम्नलिखित समाधान करने के लिए कुछ समय लगा और मुझे उम्मीद है कि इसमें कुछ स्पष्टता शामिल होगी।
तो सबसे पहले, आपके ऐप्स की सिफारिश व्यवहार निम्नलिखित (आईओएस रेफरी लिब में Opening Supported File Types देखें) प्रतीत होता है:
applicationDidFinishLaunching:
को लागू न करें (UIApplicationDelegate पर टिप्पणी देखें)।
application:didFinishLaunchingWithOptions:
लागू करें और यूआरएल की जांच करें, यदि आप इसे खोल सकते हैं तो हाँ वापस करें, अन्यथा नहीं, लेकिन इसे खोलें नहीं।
application:handleOpenURL:
लागू करें और यूआरएल खोलें, सफल होने पर हाँ वापस करें, अन्यथा नहीं।
आईओएस 4 में, निम्न दो व्यवहार में से एक में एक एप्लिकेशन परिणाम के लिए एक यूआरएल गुजर:
- एप्लिकेशन शुरू की है तो
application:didFinishLaunchingWithOptions:
कहा जाता है और अगर और application:didFinishLaunchingWithOptions:
हाँ लौटे application:handleOpenURL:
कहा जाता है।
- यदि ऐप निलंबित राज्य से सक्रिय हो रहा है तो
application:didFinishLaunchingWithOptions:
नहीं कहा जाता है लेकिन application:handleOpenURL:
कहा जाता है।
हालांकि, आईओएस 3.2 में ऐसा लगता है जैसे application:handleOpenURL:
कभी नहीं कहा जाता है! एक संकेत है कि आईओएस 3.2 के तहत व्यवहार अलग है Handling URL Requests में पाया जा सकता है। वहां आपको लगता है कि application:handleOpenURL:
कहा जाता है यदि application:didFinishLaunchingWithOptions:
लागू नहीं किया गया है, लेकिन applicationDidFinishLaunching:
लागू किया गया है। लेकिन application:handleOpenURL:
को नहीं कहा जाता है यदि application:didFinishLaunchingWithOptions:
लागू किया गया है।
इसलिए, एक समाधान 3.2 के तहत कोड काम करने के लिए और 4.0 है:
- ओपन
application:didFinishLaunchingWithOptions:
में URL है, लेकिन फिर लौट नहीं कि application:handleOpenURL:
कहा जाता है को रोकने के लिए।
application:handleOpenURL:
में यूआरएल खोलें, यदि आप 4.0 वर्ष से कम हैं और ऐप निलंबित राज्य में है।
मैं एक और पोस्ट में इस समाधान नहीं मिला है, लेकिन मैं, उलझन में थी, क्योंकि यह आईओएस रेफरी लिब दस्तावेज में सिफारिश (अर्थात् हम application:didFinishLaunchingWithOptions:
में हाँ लौटना चाहिए कि) का खण्डन किया। (उस समय मुझे एहसास नहीं हुआ कि प्रलेखन स्वयं को विरोधाभास करता है)।
मुझे विश्वास है कि वर्तमान iOS 4.0 व्यवहार भविष्य के व्यवहार मैं निम्नलिखित समाधान पसंद हो जाएगा:
applicationDidFinishLaunching:
को लागू न करें।
application:didFinishLaunchingWithOptions:
लागू करें और यूआरएल की जांच करें, यदि आप इसे खोल सकते हैं तो हाँ वापस करें, अन्यथा नहीं, लेकिन इसे खोलें नहीं। अगर हम 3.2 पर हैं, तो यूआरएल खोलें।
application:handleOpenURL:
लागू करें और यूआरएल खोलें, सफल होने पर हाँ वापस करें, अन्यथा नहीं।
तो सारांश में, मैं आईओएस 4 व्यवहार को लागू करने और application:didFinishLaunchingWithOptions:
if([[[UIDevice currentDevice] systemVersion] hasPrefix:@"3.2"]) {
[self application:application handleOpenURL:url];
}
जो 3.2 के तहत कोड काम करने के लिए निम्न पंक्ति गयी।
स्रोत
2010-08-31 19:59:39
3.2 में समस्या क्या है? त्रुटि संदेश? कोड की रेखाएं तोड़ती हैं? –
ऐसा प्रतीत होता है कि प्रतिनिधि को संदेश हैंडल ओपनURL प्राप्त नहीं होता है, अगर उसने संदेश का जवाब दिया है तो फिनिशलांचिंगविथऑप्शन, भले ही वह विधि YES वापस आती है। एपीआई दस्तावेज ने मुझे एक अलग व्यवहार का सुझाव दिया। –