2009-07-08 15 views
1

Ok, donc j'utilise NSLog dans l'objectif-C depuis quelque temps pour déboguer et je sais qu'il est supposé imprimer sur le terminal tout ce que j'ai mis entre parenthèses. Pour une raison quelconque, il a juste arrêté d'imprimer sur le terminal et je ne suis pas sûr de savoir comment corriger cette erreur. Je me demandais ce que les autres proposeraient de faire pour résoudre ce problème. J'ai seulement inclus une partie de mon code parce que je ne veux pas effrayer quelqu'un de répondre à ce problème simple (ou du moins j'espère que c'est simple à résoudre). Lorsque j'exécute le code, les deux seules instructions imprimées sont "serverButton - Stage 1" et "serverButton - Stage 2 - Complete" mais rien d'autre entre les deux. FYI - (void) startServer est dans une autre classe appelée "Server" et j'ai fait "server" un pointeur vers cette classe.NSLog n'imprime pas au terminal

-(IBAction)serverButton { 
NSLog(@"serverButton - Stage 1"); 
[server startServer]; 
NSLog(@"serverButton - Stage 2 - Complete"); 
} 

-(void)startServer { 
    NSLog(@"serverButton - Stage 1"); 

    memset(&hints, 0, sizeof hints); 
    hints.ai_family = AF_UNSPEC; // set to AF_INET to force IPv4 
    hints.ai_socktype = SOCK_DGRAM; 
    hints.ai_flags = AI_PASSIVE; // use my IP 

    if ((rv = getaddrinfo(NULL, MYPORT, &hints, &servinfo)) != 0) { 
     NSLog(@"ERROR: serverButton - Stage 1"); 
     fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv)); 
     serverError = 1; 
     NSLog(@"Error"); 
    } 
+0

Il semble que dans startServer vous écrivez "serverButton - Stage 1", puis quelques instructions d'erreur lorsqu'une erreur survient. Permettez-moi d'obtenir ce droit, il doit être imprimé (si aucune erreur ne se produit): serverButton - Étape 1 serverButton - Étape 1 serverButton - Étape 2 - Complete Et actuellement, il n'imprime pas le second message? – Solmead

Répondre

2

Ajoutez une vérification pour vous assurer que le serveur n'est pas nul avant d'appeler startServer, s'il était nul alors rien ne serait appelé et aucune erreur ne serait générée.

+0

Désolé, je viens de réaliser ce qui se passait. J'ai sorti le code de ma classe ce matin et l'ai appelé directement. Il n'y avait rien de mal à cela en premier lieu et il faisait ce qu'il était censé faire ... qui était d'avoir le serveur assis là et d'attendre sur un message du client. Je suppose que c'était une combinaison de ma supposition que mon code était mauvais quand ce n'était pas et d'être tard dans la nuit. Merci de votre aide! –

0

Vous dites:

FYI - (void) startServer est dans une autre classe appelée "serveur" et je l'ai fait "server" un pointeur que ladite classe.

Si je lis ce droit, votre variable server est en fait pointe vers une classe, comme ceci:

Class server = [Server class]; 
... 
NSLog(@"begin"); 
[server startServer]; 
NSLog(@"end"); 

Si tel est le cas, votre méthode startServer devrait être une classe méthode:

+ (void)startServer { 
    NSLog(@"hello!"); 
} 

Si ce n'est pas le cas, pouvez-vous s'il vous plaît envoyer un peu plus de code? Plus précisément, la partie où vous affectez cette variable server serait utile.

0

Il semble que le problème ne soit pas NSLog, mais plutôt que startServer ne soit pas réellement envoyé au récepteur comme vous le pensez.

0

Si le NSLog n'imprime pas sur le terminal (expliquez ce qu'est le terminal). Je suppose que le terminal est la console de débogage Xcode. Ensuite, vous devez vérifier la Console.app, si elle est imprimée là.

La nouvelle version de Xcode n'a pas ce problème.