सीधे अपने प्रश्न का उत्तर देने के लिए, नहीं, एससीनेटवर्क रीचैबिलिटी गेटफ्लैग्स() को आपके द्वारा वर्णित विशिष्ट परिस्थितियों में लौटने के लिए काफी समय लगने का कोई तरीका नहीं लगता है (उदाहरण के लिए, वाईफाई के माध्यम से रिमोट होस्ट पहुंच योग्यता की जांच करना बिना इंटरनेट के राउटर से कनेक्शन)। कुछ विकल्प:
विकल्प 1. कॉल को एक अलग थ्रेड में बनाएं ताकि आपका शेष ऐप चल रहा हो। ReachabilityAppDelegate.m संशोधित रूप में एक उदाहरण के लिए इस प्रकार है:
// Modified version of existing "updateStatus" method
- (void)updateStatus
{
// Query the SystemConfiguration framework for the state of the device's network connections.
//self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
self.remoteHostStatus = -1;
self.internetConnectionStatus = [[Reachability sharedReachability] internetConnectionStatus];
self.localWiFiConnectionStatus = [[Reachability sharedReachability] localWiFiConnectionStatus];
[tableView reloadData];
// Check remote host status in a separate thread so that the UI won't hang
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSTimer *timer = [NSTimer timerWithTimeInterval:0 target:self selector:@selector(updateRemoteHostStatus) userInfo:nil repeats:NO];
[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
[pool release];
}
// New method
- (void) updateRemoteHostStatus
{
self.remoteHostStatus = [[Reachability sharedReachability] remoteHostStatus];
[tableView reloadData];
}
विकल्प 2. एक अलग एपीआई/समारोह जब दूरस्थ होस्ट से कनेक्ट करने का प्रयास एक टाइमआउट मान का उपयोग करता है का उपयोग करें। इस तरह आपका ऐप केवल छोड़ने से पहले एक्स सेकंड के लिए लटका होगा।
कुछ अन्य बातें ध्यान रखें:
- SCNetworkReachabilityGetFlags() है कि आप के बारे में (यानी, लाइन ~ 399 Reachability.m में) को देखने के लिए कोशिश कर रहा है पूछ रहे हैं के लिए विशिष्ट कॉल करता है, तो www.apple.com यदि "बाहरी इंटरनेट" सामान्य रूप से "पहुंच योग्य" है तो कटौती करने के लिए "पहुंच योग्य" है।
- ऐप्पल के सिस्टम में कॉन्फ़िगर फ्रेमवर्क "पहुंचने योग्य" का अर्थ यह नहीं हो सकता कि आप क्या सोचते हैं। आधिकारिक दस्तावेज़ों के मुताबिक, "पहुंचने योग्य" का अर्थ यह है कि, सिद्धांत रूप में, आपका कंप्यूटर होस्ट एक्स से कनेक्ट हो सकता है, लेकिन इसे वास्तव में पहले कनेक्शन स्थापित करना पड़ सकता है (उदाहरण के लिए, पहले मॉडेम डायल करें)। दूसरे शब्दों में, SCNetworkReachabilityGetFlags() वास्तव में एक कनेक्शन स्थापित नहीं करता है।
स्रोत
2009-04-08 04:52:42
धन्यवाद। मैं टाइमआउट कैसे बना सकता हूं ताकि टाइमआउट अंतराल पर हिट होने पर कॉल कॉल पर वापस आ जाए? यदि UIWebViewDelegate :: webViewDidFinishLoad को टाइमआउट अंतराल से पहले बुलाया जाता है, तो मैं टाइमआउट रद्द कर सकता हूं। – 4thSpace
एनएसटीमर के शेड्यूल टाइमर विथटाइम इंटरवल: विधि पर एक नज़र डालें। आप वर्तमान थ्रेड में टाइमर बना सकते हैं, उदाहरण के लिए, 5 सेकंड के बाद कुछ विधि निष्पादित करता है। यह तरीका यह देखने के लिए जांच सकता है कि क्या SCNetworkReachabilityGetFlags() समाप्त हो गया है, और यदि ऐसा नहीं है, तो अपना टाइमआउट तर्क चलाएं। –