Question

J'utilise le code de Document d'Apple pour faire une communication HTTP. Je peux me connecter à l'URL avec succès, mais je pas reçu les données de mon serveur.

// create the request
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://..."]
                        cachePolicy:NSURLRequestUseProtocolCachePolicy
                        timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
    // Create the NSMutableData that will hold
    // the received data
    // receivedData is declared as a method instance elsewhere
    NSMutableData *receivedData=[[NSMutableData data] retain];
} else {
    // inform the user that the download could not be made
}

La raison peut être:

  1. Je déclare receivedData dans l'action elle-même. L'annotation dit que je devrais déclarer ailleurs. Où dois-je déclarer? Dois-je déclarer comme propriété du contrôleur?

  2. Comment [[NSMutableData data] retain] trouver l'URL comme il est en dehors de la if{}

Était-ce utile?

La solution

Lorsque vous utilisez initWithRequest de NSURLConnection: délégué: méthode, les données (ainsi que d'autres choses) est envoyé à l'objet délégué dans une séquence d'appels de méthode. Les méthodes sont en option, donc si votre objet délégué ne les met pas en œuvre, l'objet de connexion juste les ignore.

Il y a un tas de méthodes, je ne vais pas les énumérer ici, mais ils sont tous décrits en détail dans la documentation NSURLConnection. Pour obtenir les données reçues, vous aurez envie de mettre en œuvre -connection: didReceiveData: sur l'objet délégué. Cette méthode est appelée, potentiellement plus d'une fois, avec un objet NSData représentant les données nouvellement reçues. Vous pouvez ensuite ajouter que votre objet NSMutableData existant ou faire tout autre sens avec elle. Vous saurez que vous avez reçu toutes les données lorsque -connectionDidFinishLoading. Est appelé l'objet délégué

Pour répondre à vos deux questions spécifiques:

  1. Oui, vous devez le déclarer comme propriété de l'objet contrôleur. Vous devez également vous assurer d'affecter l'objet avant d'appeler initWithRequest de NSURLConnection: déléguer :, parce que la connexion démarre le chargement des données de manière asynchrone dès que l'objet de connexion est créé. Alternativement, vous pouvez mettre en œuvre -connection: didReceiveResponse:. Le délégué, vérifier l'état HTTP, et de créer l'objet de données puis

  2. L'objet mutable ne peut pas trouver l'URL, la connexion ou ses données que vous l'avez mis en place, mais si vous suivez les étapes que je viens de décrire, alors vous pouvez y ajouter des données comme il arrive, et l'utiliser lorsque la connexion se termine.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top