क्या यह आमतौर पर -[NSRunLoop runUntilDate:]
पर कॉल करने का अच्छा विचार है? यह किसी भी मुद्दे के बिना काम करता प्रतीत होता है, लेकिन यह मुझे रन लूप के भीतर से चलाने के लिए रन लूप को बताने में परेशान करता है।कॉल कर रहा है - [NSRunLoop runUntilDate:] एक अच्छा विचार है?
और जानकारी:
मैं एक परियोजना अभी है कि एक बाकी सेवा से डेटा प्राप्त करने में किया जाता है। जानकारी का एक महत्वपूर्ण टुकड़ा जिसे प्राप्त करने की आवश्यकता है वह मान्य डेटा वाले तिथियों की सीमा है। यह बहुत छोटा डेटा है जिसे केवल एक बार प्राप्त करने की आवश्यकता है, इसलिए मैंने फैसला किया कि इसे संभालने का सबसे अच्छा तरीका यह है कि यदि स्थानीय चर nil
है तो संपत्ति डेटा डाउनलोड करें। मैं ASIHTTPRequest
और ASINetworkQueue
का उपयोग कर रहा हूं, इसलिए डिफ़ॉल्ट रूप से सबकुछ असीमित है, और इसके लिए काम करने के लिए, यह संपत्ति तब तक वापस नहीं आ सकती जब तक डेटा डाउनलोड और संसाधित नहीं हो जाता है। यहाँ मेरी कोड की एक रूपरेखा है, चर के नाम मासूम की रक्षा करने के लिए बदल दिया गया है:
__block BOOL isWorking = YES;
__block ASIHTTPRequest *request = [[[ASIHTTPRequest alloc] initWithURL:/*actual URL*/] autorelease];
[request setCompletionBlock:^{
// set local variable
isWorking = NO;
}];
[request setFailedBlock:^{
// show alert to user
isWorking = NO;
}];
[queue addOperation:request];
while (isWorking) {
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
}
फिर, यह काम करने ठीक लग रहा है। क्या इस दृष्टिकोण का उपयोग करने के साथ कोई संभावित समस्या है?
इसलिए, इस मामले में, यह इस दृष्टिकोण की तरह सुरक्षित है लगता है कि कह सकते हैं और कुछ नहीं है के बाद से यह संपत्ति डेटा डाउनलोड करने में व्यस्त है। लेकिन अगर ऐसी स्थिति थी जहां उपयोगकर्ता व्यस्त था, तो वह बटन दबा सकता था और उस संपत्ति को फिर से बुला सकता था, तो यह उड़ाएगा? जानकार अच्छा लगा। –
क्या यह संपत्ति किसी भी यूआई विधि या प्रतिनिधि द्वारा प्रत्यक्ष या अप्रत्यक्ष रूप से उपयोग की जाती है? यदि हां, तो यह अभी भी एक बड़ी समस्या है। – hotpaw2
मुझे यकीन है कि यह केवल तब ही इस कोड को दबाएगा जब ऐप शुरू में यूआई से पहले लोड हो जाता है, उपयोगकर्ता को भी प्रस्तुत किया जाता है। उसके बाद, डेटा वहां होगा और यह स्थानीय चर का उपयोग करेगा। यदि यह किसी कारण से डेटा डाउनलोड नहीं कर सकता है, तो यह उपयोगकर्ता को एक मोडल अलर्ट प्रदर्शित करता है और जब तक यह सफलतापूर्वक डाउनलोड नहीं होता है तब तक वे ऐप में नहीं जा सकते। –