शेयरकिट में, कोड को यह निर्धारित करने की आवश्यकता है कि rootViewController कहां है, इसलिए यह एक मोडल व्यू दिखा सकता है। किसी कारण से, कोड आईओएस 5:आईओएस में रूट व्यू कंट्रोलर ढूंढना
// Try to find the root view controller programmically
// Find the top window (that is not an alert view or other window)
UIWindow *topWindow = [[UIApplication sharedApplication] keyWindow];
if (topWindow.windowLevel != UIWindowLevelNormal)
{
NSArray *windows = [[UIApplication sharedApplication] windows];
for(topWindow in windows)
{
if (topWindow.windowLevel == UIWindowLevelNormal)
break;
}
}
UIView *rootView = [[topWindow subviews] objectAtIndex:0];
id nextResponder = [rootView nextResponder];
if ([nextResponder isKindOfClass:[UIViewController class]])
self.rootViewController = nextResponder;
else
NSAssert(NO, @"ShareKit: Could not find a root view controller. You can assign one manually by calling [[SHK currentHelper] setRootViewController:YOURROOTVIEWCONTROLLER].");
यह असफल रहा है।
इसके बजाय निम्न कोड का उपयोग करने में क्या गलत है?
rootViewController = [[[UIApplication sharedApplication] keyWindow] rootViewController];
ऐसा लगता है कि यह ठीक काम कर रहा है। क्या यह कुछ स्थितियों में विफल हो जाएगा?
:
इसकी में एक मानक समारोह के रूप में शामिल निम्नलिखित ठीक काम करने के लिए लग रहा था धन्यवाद। RootViewController इस मामले में सेट है। यह मुझे स्पष्ट नहीं है कि बस यह सेटिंग स्वचालित रूप से रूटव्यू कंट्रोलर को इस शेयरकिट कोड के उद्देश्य के लिए बनाता है। यह एक सार्वभौमिक ऐप है, और आईफोन कोड में, rootViewController एक उप-वर्गीकृत UITabBarController है। मुझे यह जोड़ना चाहिए कि मेरे पास एक यूआईएलर्टव्यू और यूआईवीव भी एप्लिकेशन विंडो में सबव्यूव के रूप में जोड़ा गया है। (मैं टैबबंट कंट्रोलर से कौन सा दृश्य दिखा रहा हूं, इस पर ध्यान दिए बिना मैं इनमें से एक या दोनों को दिखा सकता हूं।) आपका कोड UIAlertView को ऑब्जेक्ट एट इंडेक्स: 0 के रूप में देता है। मैं बस बाकी के माध्यम से पुन: प्रयास कर सकता हूं, मुझे लगता है। – Jim
यदि आप इसे अपने ऐप में सेट कर रहे हैं तो यह निश्चित रूप से काम करेगा। मुझे नहीं पता था कि क्या आप दूसरों के लिए लाइब्रेरी बना रहे हैं, जहां आप 'window.rootViewController' पर भरोसा नहीं कर सकते हैं। – XJones
@XJones, क्या होगा अगर window.rootViewController सेट नहीं है? क्या वर्तमान दृश्य नियंत्रक को विश्वसनीय रूप से प्राप्त करने का कोई अन्य तरीका है? – Zennichimaro