2011-09-13 9 views
15

मैंने ऐप्पल के SimpleURLConnections नमूना समेत बहुत सारे कोड देखे हैं, जो कि किसी भी NSRLResponse को NSHTTPURLResponse में डालें। यदि यह हमेशा एक NSHTTPURLResponse है NSRLConnections NSHTTPURLResponse क्यों नहीं लौटाता है?NSRLResponse एक NSHTTPURLResponse क्यों नहीं है?

मुझे चिंता है कि अगर मैं प्रतिक्रिया को कम करता हूं, तो मैं छोटी गाड़ी कोड पेश कर रहा हूं।

उदाहरण के लिए, क्या यह जांचने के बिना ठीक है KindOfClass?

- (NSURLRequest *)connection:(NSURLConnection *)connection willSendRequest:(NSURLRequest *)request redirectResponse:(NSURLResponse *)redirectResponse 
{ 
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse; 
// do stuff 
} 

उत्तर

17

यह ठीक है यदि आप सुनिश्चित करें कि आपका कनेक्शन HTTP प्रोटोकॉल के माध्यम से चलता है:

एक NSHTTPURLResponse वस्तु एक HTTP यूआरएल लोड अनुरोध के जवाब में प्रतिनिधित्व करता है। यह NSURLResponse का उप-वर्ग है जो HTTP प्रोटोकॉल प्रतिक्रियाओं के लिए विशिष्ट जानकारी तक पहुंचने के तरीकों को प्रदान करता है।

आप FTP के माध्यम से कनेक्ट कर रहे हैं, उदाहरण के लिए, तो NSURLResponseNSHTTPURLResponse पर कास्ट करना गलत होगा।

+0

HTTP प्रतिक्रिया कोड 3 अंकों लंबा होना चाहिए, यदि आप उस लंबाई से अधिक हो रहे हैं, तो वैध HTTP प्रतिक्रिया कोड नहीं है। –

+0

मैं सिर्फ एक कलाकार की तुलना में बेहतर प्रकार की जांच करने का सुझाव देता हूं, मेरे पास NSURLResponse से संबंधित क्रैश के कई मामले हैं जो NSHTTPURLResponse नहीं हैं, भले ही मैं केवल HTTP कनेक्शन से निपट रहा हूं। – Psycho

17

आत्मनिरीक्षण के साथ ऐसा करने का सुरक्षित तरीका है।

if ([response isKindOfClass:[NSHTTPURLResponse class]]) { 
    NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)redirectResponse; 
    // do stuff 
} 
संबंधित मुद्दे