nsurlconnection asynchrone Anforderung

Zunächst die Fragen sind failry simiple.. wenn Sie nur wollen, um zu sehen, was Sie sind, scrollen Sie zum Ende von diesem post, und Sie sehen Sie in Fett.. für mehr Details, dann können Sie Lesen Sie den rest von diesem post...

Ich versuche nur, um Eisen aus meinem NSURLConnection, so dass Ihre Arbeit reibungslos und verstehe ich das richtig. Gibt es einen grundlegenden Mangel an Beispiel/tutorials für Asynchrone verbindungen auf das internet oder nicht, dass kann ich feststellen, dass explaine, was Los ist mit jeder Ebene der Tiefe, andere als immer die Verbindung laufen, die nach der Arbeit auf, es scheint ziemlich einfach. Hoffentlich kann diese Frage voll die leere, die ich fühle, ist für andere Nutzer.

So, in meinem .h-Datei habe ich importiert die Grundlagen Header und erklärt die notwendigen Methoden für das empfangen oder das fehlen der empfangenen Daten (Fehler etc).

.h

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h> //add foundations
//.. other headers can be imported here

@interface MyViewController: UITableViewController { 

//Im not setting any delegates to access the methods because Is all happening in the same 
//place so I just use the key word 'self' when accessing the methods declared below
//I'm not sure if this is the best thing to do but I wasn't able to get my head around declaring the delegate or how it would help me with the way I have set up my request etc.

}
- (IBAction)setRequestString:(NSString *)string; //this method sets the request and connection methods

//these methods receive the response from my async nsurlconnection
- (void)receivedData:(NSData *)data;
- (void)emptyReply;
- (void)timedOut;
- (void)downloadError:(NSError *)error;

Also das ist meine header-Datei.. ist ziemlich einfach, nicht viel zu erklären brauchte.

.m

//call setRequestString from some other method attached to a button click or something
[self setRequestString:@"rss.xml"];
//..

- (IBAction)setRequestString:(NSString *)string
{
    //Set database address
    NSMutableString *databaseURL = [[NSMutableString alloc] initWithString:@"http:www.comicbookresources/feeds/"]; //address not real jsut example

    //append the string coming in to the end of the databaseURL
    [databaseURL appendString:string];

    //prepare NSURL with newly created string
    NSURL *url = [NSURL URLWithString:databaseURL];

    //AsynchronousRequest to grab the data
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    NSOperationQueue *queue = [[NSOperationQueue alloc] init];

    [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
    {
        if ([data length] > 0 && error == nil){
            [self receivedData:data];
        }else if ([data length] == 0 && error == nil){
            [self emptyReply];
        }else if (error != nil && error.code == NSURLErrorTimedOut){ //used this NSURLErrorTimedOut from foundation error responses
            [self timedOut];
        }else if (error != nil){
            [self downloadError:error];
        }
    }];
}

nun richten die Methoden, die initialisiert wurden, in der .h-Datei und als in der if-Anweisung oben

- (void)receivedData:(NSData *)data
{
    NSString* newStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"%@", newStr);   //logs recived data
    //now you can see what data is coming in on your log
    //do what you want with your data here (i.e. start parsing methods
}
- (void)emptyReply
{
    //not sure what to do here yet?
}
- (void)timedOut
{
    //also not sure what to do here yet?
}
- (void)downloadError:(NSError *)error
{
    NSLog(@"%@", error);
    UIAlertView *errorAlert = [[UIAlertView alloc] initWithTitle:@"Error!" message:@"A connection failure occurred." delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
    [errorAlert show];
}

Cool, so dass man so ziemlich die Grundlagen dessen, was ich getan habe, richtig, es.. nun die Fragen, die ich habe sind wie folgt.

Frage eins:
Wo rufe ich NSURLConnection wie so

[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *error)
        {

Was ist hier passiert, was ist das ^ - für ist, dass die Ausführung, dass der ganze block (einschließlich der if-Anweisungen) in einem anderen thread, oder was? weil es sieht viel wie "grand central dispatch" Formatierung, aber etwas anders.

Frage zwei:
was sollte ich tun, innerhalb emptyReply & timedOut Methoden?

Frage drei:
Wie würde ich übernehmen-caching in diesem? Ich würde gerne cache die Antworten, die ich wieder von verschiedenen Anfragen. also mit meinem setRequestString Sie werden sehen, es ist eine Zeichenfolge, die input-parameter, so kann ich verlangen verschiedene rss-feeds mit der gleichen Methode.. die ich brauche, um herauszufinden, wie cache, die diese Reaktionen in den einzelnen caches.. aber im nicht sicher, wo zu beginnen.

Schließlich
Wenn Sie es bis hierher geschafft haben, vielen Dank für das Lesen meiner Frage. Hoffentlich mit Ihren Antworten, die wir bekommen können eine ziemlich nette Lösung gehen hier.. das können andere Menschen für sich und wählen, und wählen Sie die bits und Stücke, die Sie benötigen, die arbeiten, für die es eigene Lösung..

Trotzdem danke sehr für das Lesen und ich freue mich auf Eure Antworten.. auch wenn Sie nur refrences zu tutorials oder Beispiele, die Sie vielleicht denken helfen mir.. alles ist gut ich will nur voll verstehen, was Los ist, und was ist eine gute Lösung.

InformationsquelleAutor C.Johns | 2012-02-15
Schreibe einen Kommentar