2011-12-15 14 views
21

मैं जानना चाहता हूं कि मुझे केवल वापसी मूल्य 1 या 0 कैसे प्राप्त होता है .... एक यूआरएल अनुरोध से असीमित रूप से वापस।असीमित यूआरएल अनुरोध कैसे भेजें?

वर्तमान में मैं इस तरह से यह कार्य करें:

 NSString *UTCString = [NSString stringWithFormat:@"http://web.blah.net/question/CheckQuestions?utc=%0.f",[lastUTCDate timeIntervalSince1970]]; 
     NSLog(@"UTC String %@",UTCString); 
     NSURL *updateDataURL = [NSURL URLWithString:UTCString]; 
     NSString *checkValue = [NSString stringWithContentsOfURL:updateDataURL encoding:NSASCIIStringEncoding error:Nil]; 
     NSLog(@"check Value %@",checkValue); 

इस काम करता है, लेकिन यह मेरी मुख्य थ्रेड ब्लॉक कर रहा है जब तक मैं एक उत्तर URL से वापस मिल, मैं इसे कैसे सेट करूँ तो यह उस में क्या करेंगे मुख्य धागे के बजाय एक और धागा?

संपादित करें: उत्तर मैं इस के साथ मेरी समारोह upcalling अंत में, यह अच्छी तरह से काम करता है :)

[self performSelectorInBackground:@selector(shouldCheckForUpdate) withObject:nil]; 
+5

iOS 5 के रूप में, आप उपयोग कर सकते हैं sendAsynchronousRequest: (NSURLRequest *) अनुरोध कतार: (NSOperationQueue *) कतार completionHandler: (शून्य (^) (NSURLResponse *, NSData *, NSError *)) हैंडलर ', जो एक प्रतिनिधि वस्तु बनाने के बजाय सरल अनुरोधों के लिए आसान और स्पष्ट है। मैं बाद में इस विधि को दिखाने का उत्तर लिखने की कोशिश करूंगा। –

+1

@MarkAmery आपके उत्तर को देखना अच्छा लगेगा। मुझे 'sendAsynchronousRequest' का एक सरल उदाहरण खोजने में कठिनाई हो रही है। –

उत्तर

28

आप NSURLConnection वर्ग

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]]; 
[[[NSURLConnection alloc] initWithRequest:request delegate:self] autorelease]; 

का उपयोग करें और अपनी प्रतिक्रिया और उसके प्रतिनिधि तरीकों का उपयोग कर त्रुटियों को संभाल सकता है।

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

आप NSURLConnection

के कार्यान्वयन

संपादित पा सकते हैं: हालांकि NSURLConnection सेब द्वारा प्रदान की गई URL अनुरोध रखने की सिफारिश की अधिक तरीका है। लेकिन मुझे AFNetworking लाइब्रेरी बहुत समय बचाने, लागू करने में आसान और तीसरे पक्ष के कार्यान्वयन के रूप में मजबूत अभी तक आसान पाया गया। आपको इसके लिए प्रयास करना चाहिए।

+1

कुकी विधि प्राप्त करने के लिए मुझे किस विधि का उपयोग करना चाहिए ?? – kAnNaN

5

उपयोग NSURLConnection और आपके अनुरोध करते हैं। तो फिर तुम NSURLConnection के तरीकों के साथ तुल्यकालिक या अतुल्यकालिक कनेक्शन शुरू हो सकता है:

डेटा लोड हो रहा Synchronously

+ sendSynchronousRequest:returningResponse:error: 

डेटा लोड हो रहा एसिंक्रोनस रूप

+ connectionWithRequest:delegate: 
– initWithRequest:delegate: 
– initWithRequest:delegate:startImmediately: 
– start 

में Apple डेवलपर API संदर्भ NSURLConnection वर्ग की जाँच करें।

+0

यहां लिंक है: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html – samfisher

26

इस प्रयास करें:

ज:

NSMutableData *responseData; 

मीटर:

- (void)load 
{ 
    NSURL *myURL = [NSURL URLWithString:@"http://www.example.com"]; 
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:myURL cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:60]; 

    [[NSURLConnection alloc] initWithRequest:request delegate:self]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    responseData = [[NSMutableData alloc] init]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
    [responseData appendData:data]; 
} 

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error 
{ 
    [responseData release]; 
    [connection release]; 
    [textView setString:@"Unable to fetch data"]; 
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSLog(@"Succeeded! Received %d bytes of data",[responseData 
                length]); 
    NSString *txt = [[[NSString alloc] initWithData:responseData encoding: NSASCIIStringEncoding] autorelease]; 
} 
+0

मुझे सिर्फ 1 या 0 के उत्तर की आवश्यकता है, क्या यह इसके लिए बहुत अधिक है? – Desmond

+0

@ मौलिक "स्मार्ट डेवलपर्स" कमरा जोड़ें। – MinuMaster

+0

@ मौलिक, आपने मेरा दिन बचाया, बड़ा धन्यवाद! – DeZigny

2

iOS के XCode प्रलेखन बुलाया LazyTableImages में एक उदाहरण है। स्क्रॉलिंग स्टॉप के बाद स्क्रीन पर प्रदर्शित UITableView कोशिकाओं में यह एसिंक्रोनस यूआरएल के साथ-साथ एसिंक्रोनस छवि लोड करता है। प्रोटोकॉल का उत्कृष्ट उदाहरण, एसिंक्रोनस डेटा हैंडलिंग, आदि

3

https://gist.github.com/knmshk/3027474 से निर्बाध रूप से कॉपी करें। सभी क्रेडिट https://gist.github.com/knmshk पर जाते हैं।`+ (शून्य)

xmlData = [[NSMutableData alloc] init]; 
NSURL *url = [NSURL URLWithString: 
@"http://forrums.bignerdranch.com/smartfeed.php?" 
@"limit=NO_LIMIT&count_limit20&sort_by=standard&" 
@"feed_type=RSS2.0&feed_style=COMPACT"]; 
NSURLRequest *request = [NSURLRequest requestWithURL:url]; 
//connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 
NSOperationQueue *queue = [[NSOperationQueue alloc]init]; 
[NSURLConnection sendAsynchronousRequest:request 
            queue:queue 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error){ 
          if (error) { 
           xmlData = nil; 
           NSLog(@"error:%@", error.localizedDescription); 
          } 
          [xmlData appendData:data]; 
         }]; 
संबंधित मुद्दे