2012-06-12 24 views
7

मैं अपने आईओएस ऐप से एक webservice कॉल कर रहा हूं जिसमें वापस आने में चार मिनट लग सकते हैं। मैं ऑब्जेक्ट्स के कॉल और लोडिंग के लिए रेस्टकिट का उपयोग कर रहा हूं। मुझे जो मिल रहा है वह यह है कि जब अनुरोध लंबे समय ले रहे हैं, तो मुझे 60 सेकंड के बाद टाइमआउट त्रुटि मिलती है। मैंने टाइमआउट अंतराल को बेतुका मात्रा में सेट करने का प्रयास किया है लेकिन यह अभी भी ~ 60 के बाद समाप्त हो गया है। - वहाँ है कि डिजाइन में कुछ है कि हो सकता हैRestKit टाइमआउट को अनदेखा किया जा रहा है

- (void)loadData 
{ 

NSString *uid = [self retrieveFromUserDefaults:@"login_preference"]; 
NSString *pwd = [self retrieveFromUserDefaults:@"password_preference"]; 

if([uid isEqualToString:@""] || [pwd isEqualToString:@""]){ 
    [self stopSpinner]; 
    [self enableUserInterface:YES]; 
    UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Missing Settings" 
                message:@"Please enter your login information in the settings." 
                delegate:nil 
              cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    return; 

} 


RKObjectManager* objectManager = [RKObjectManager sharedManager]; 
NSDictionary *params = [NSDictionary dictionaryWithObjects: 
         [NSArray arrayWithObjects:uid, pwd, nil] 
                forKeys:[NSArray arrayWithObjects:@"uid", @"pwd", nil]]; 

// Load the object model via RestKit  
[objectManager loadObjectsAtResourcePath:[@"/synchData" appendQueryParams:params] delegate:self]; 

}

मैं एक पृष्ठभूमि सूत्र में वेब सेवा के लिए कॉल कर रहा हूँ:

RKObjectManager* objectManager = [RKObjectManager objectManagerWithBaseURL:HOSTNAME]; 

objectManager.client.requestQueue.showsNetworkActivityIndicatorWhenBusy = YES; 
objectManager.client.disableCertificateValidation = YES; 

//timeout 
objectManager.client.timeoutInterval = 1000; 

यहाँ सेवा करने के लिए कॉल है समस्या पैदा कर रहा है? मैं कल्पना नहीं कर सकता, आईओएस की तरह पृष्ठभूमि थ्रेड 60 सेकंड से अधिक समय तक चलने की अनुमति नहीं दे रहा है? मैं सिर्फ यह नहीं समझ सकता कि समस्या क्या है।

क्या समय से सर्वर से प्रतिक्रिया प्राप्त करने के लिए समय लगता है, या सर्वर से WHOLE प्रतिक्रिया प्राप्त करने के लिए समय लगता है? मैं एक संभावित रूप से बहुत बड़ी जेसन प्रतिक्रिया वापस कर रहा हूं - क्या मुझे समयावधि सीमा के भीतर पूरी चीज वापस करने की ज़रूरत है, या क्या मुझे बस सीमा से सर्वर से कोई प्रतिक्रिया प्राप्त करने की आवश्यकता है?

+0

हमें दिखाएं कि आप अपने अनुरोध कैसे प्रेषित करते हैं। टाइमआउट वह समय है जब तक आपका आवेदन तब तक इंतजार नहीं करता जब तक कि उसे कोई प्रतिक्रिया न हो, आपको इस समय के भीतर पूरी चीज़ वापस करने की आवश्यकता नहीं है। – lawicko

+0

धन्यवाद - मैंने थोड़ा जोड़ा, क्या आपका मतलब था? मैंने दो बार चेक किया और कोई फर्क नहीं पड़ता कि मेरा टाइमआउट अंतराल क्या है, यह 60 सेकंड के बाद मर रहा है। – Michaela

+1

हां, यही मेरा मतलब था। मुझे आपके कोड में कुछ भी गलत नहीं दिख रहा है, आप टाइमआउट कैसे पकड़ते हैं? RestKit दस्तावेज़ों का कहना है कि डिफ़ॉल्ट टाइमआउट 120 सेकंड पर सेट किया गया है और वह टाइमआउट फ़ंक्शन ' वापस करेगा RKRequestConnectionTimeoutError didFailLoadWithError के माध्यम से:', इसलिए यदि आप इसे 'requestDidTimeout:' में पकड़ते हैं, तो ऐसा कोई मौका है कि कुछ अन्य तंत्र इसे आमंत्रित करते हैं। आप एक विधि में एक डीबगर डालना चाहते हैं जो टाइमआउट को पकड़ता है और कॉलआउट स्टैक की जांच करता है ताकि यह पता चल सके कि वास्तव में टाइमआउट का कारण क्या है, शायद यह आपको यह पहचानने में मदद करेगा कि 60 का मूल्य कहां से आता है। – lawicko

उत्तर

0

मुझे एक ही समस्या है, प्रतिनिधि विधि requestDidTimeout:(RKRequest*)request कभी नहीं बुलाया जा रहा है। कोई फर्क नहीं पड़ता कि मैं RKRequest या RKClient पर टाइमआउट सेट करता हूं।

चेतावनी: जब अनुरोध पर समय-समाप्ति सेट, मैं देख रहा हूँ अनुरोध नहीं सेट टाइमआउट का सम्मान जब तक मैं भी [requestObject createTimeOutTimer] कहते हैं।

हालांकि, मैं आपके कार्यान्वयन में जो नोटिस करता हूं वह यह है कि आप एनएसटीइम इंटरवल के लिए 1000 का उपयोग करते हैं: क्या आपका मतलब टाइमआउट के लिए 1000 सेकंड है? यदि आप एक सेकंड = 1000 एमसीईसी का मतलब है तो 1 में बदलें।

रेस्टकिट पर डिफ़ॉल्ट टाइमआउट 120 सेकंड है, इसलिए संभवतः यह एक NSURLConnection टाइमआउट है।

2

अगर मैं आपकी समस्या को समझते हैं, समाधान होगा:

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error 

तो जब आप समय समाप्त अंतराल के साथ समस्या है, यह इस पद्धति में पकड़ा दिया जाएगा।

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^