comment créer un synchrones NSURLConnection demande

Je suis désireux de créer un synchrones nsurlconnection demande. Oui je sais que je suis stupide et je sais que les limitations (gel de l'INTERFACE utilisateur), cependant la raison pour laquelle je souhaite la mise en place de ce grenat les données que je reçois de du serveur est reçu dans l'ordre qu'il est envoyé, qui Est l'un des avantages d'une connexion synchrone.. si j'ai lu correctement.

Je vais être à l'aide de Grand Central Dispatch pour atteindre certains multi threading pour exécuter la requête de synchronisation et ne pas avoir d'effet de l'INTERFACE utilisateur du thread principal... mais cela peut venir plus tard, pour l'instant, je voudrais maître de la connexion de synchronisation.

Le seul problème est que je ne suis pas exactement sûr de savoir comment configurer ma connexion synchrone..

Voici mon code.

- (void)loadComics{

    [comics removeAllObjects]; //clears object of any old values
    [[self tableView] reloadData];

    NSURL *url = [NSURL URLWithString:@"http://www.comicbookresources.com/feed.php?feed=previews"];

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30];

    //clear any existing connection
    if (connectionInProgress) {
        [connectionInProgress cancel];
        [connectionInProgress release];
    }

    [xmlData release];
    xmlData = [[NSMutableData alloc] init];

    connectionInProgress = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES];
}

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

- (void) connectionDidFinishLoading:(NSURLConnection *)connection{

    NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];

    [parser setDelegate:self];

    [parser parse];

    [parser release];
    [[self tableView] reloadData];
}

des exemples serait génial.

  • Qu'entendez-vous par "grenat les données que je reçois de du serveur est reçu dans l'ordre il est envoyé"? Synchrone de réseautage—même dans un thread d'arrière-plan est presque toujours un indicateur d'une mauvaise conception.
  • aussi loin que je me suis conscient asynchrone peut parfois recevoir des données dans un ordre incorrect. Le moteur de base de données, je vais avoir à communiquer avec m'oblige à faire ce syncronosly comme il est important de recevoir les données dans le bon ordre. Pourquoi pensez-vous que c'est un indicateur d'une mauvaise conception, je suis intéressé par votre point de vue comme je suis actuellement seul le fait que j'ai été instruit cependant si je peux mettre ensemble un cas à la base de données ingénieur quant à pourquoi il devrait donc sinon je serais intéressé à connaître votre opinion.
  • Ce n'est pas exact — vous n'avez pas à vous soucier de la réception de connection:didReceiveData: rappels à l'ordre. Ce que vous avez écrit a l'air bien, vous pouvez simplement concaténer les blocs de données que vous les recevez, et faire quelque chose avec les données complètes dans connectionDidFinishLoading:. Ce ne serait qu'un problème si, pour une raison quelconque, vous étiez à l'exécution de plusieurs NSURLConnections dans le même temps, tous avec le même délégué. Mais en général, vous ne voulez pas le faire!
  • ok cool je obtenir ce que vous dites merci pour la clarification.
InformationsquelleAutor C.Johns | 2012-02-12