2010-08-20 5 views
0

Lurker longue durée, première fois.Les fonctions de délégué ne sont pas appelées

Je crée un module ServerConnection pour le rendre beaucoup plus modulaire et plus facile mais j'ai du mal à appeler le délégué. J'ai vu quelques autres questions comme celle-ci mais aucune des réponses n'a résolu mon problème. ServerConnection est configuré comme protocole.

Un objet ServerConnection est donc créé dans Login.m qui appelle le serveur, puis ajoute des méthodes déléguées dans Login pour gérer s'il y a une erreur ou si c'est fait, elles sont appelées par ServerConnection comme ci-dessous.

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

    if([self.delegate respondsToSelector:@selector(connectionDidFinish:)]) { 
     NSLog(@"DOES RESPOND"); 
     [self.delegate connectionDidFinish:self]; 
    } else { 
     NSLog(@"DOES NOT RESPOND"); 
    } 

    self.connection = nil; 
    self.receivedData = nil; 

} 

Il ne répond toujours pas. J'ai essayé le truc de CFRunLoop (ci-dessous) mais ça ne marche toujours pas.

- (IBAction)processLogin:(id)sender { 

    // Hide the keyboard 
    [sender resignFirstResponder]; 

    // Start new thread 
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 

    // Acutally call the server 
    [self authenticate]; 

    // Prevent the thread from exploding before we've got the data 
    CFRunLoopRun(); 

    // End thread 
    [pool release]; 

} 

J'ai copié le Apple URLCache demo assez fortement et les ont comparé les deux à plusieurs reprises, mais ne peut trouver toute divergence.

Toute aide serait grandement appréciée.

Répondre

2

Voici les questions à poser:

  • ne répond à votre délégué connectionDidFinishLoading:?
  • La signature correspond-elle, c'est-à-dire qu'elle prend un autre objet?
  • Le délégué est-il défini ou est-il nul? (Cochez cette case dans cette même méthode)

Si l'une d'entre elles est "NON", vous verrez "ne répond pas" ... et toutes les probabilités de se produire dans votre application, mais toutes sont faciles à comprendre.

+0

Un grand merci pour cela. Il lui manquait la 'self.delegate = theDelegate;' dans cette fonction '- (id) initWithURL: (NSString *) Theurl withData: (NSString *) theData délégué: (id ) theDelegate; {' – user426140

Questions connexes