1

わかりましたので、デバッグのためにしばらくの間 Objective-C で NSLog を使用してきましたが、括弧に入れたものは何でも端末に出力することになっていることがわかっています。何らかの理由で、端末への出力が停止しただけで、このエラーを修正する方法がわかりません。この問題を解決するために他の人が何を提案するのか疑問に思っていました。この単純な (または、少なくとも簡単に修正できることを願っています) 問題に答えることから誰かを怖がらせたくないので、コードの一部のみを含めました。コードを実行すると、出力されるステートメントは「serverButton - Stage 1」と「serverButton - Stage 2 - Complete」の 2 つだけですが、その間には何もありません。参考までに -(void)startServer は「サーバー」と呼ばれる別のクラスにあり、「サーバー」をそのクラスへのポインターにしました。

-(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");
    }
4

4 に答える 4

2

startServerを呼び出す前に、サーバーがnilでないことを確認するチェックを追加します。nilの場合、何も呼び出されず、エラーは生成されません。

于 2009-07-08T03:01:24.093 に答える
0

あなたは言う:

参考までに-(void)startServerは「Server」と呼ばれる別のクラスにあり、「server」をそのクラスへのポインターにしました。

私がその権利を読んだ場合、あなたの変数は実際には次のようにクラスserverを指しています。

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

その場合、startServerメソッドはクラスメソッドである必要があります。

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

そうでない場合は、もう少しコードを投稿していただけますか?具体的には、そのserver変数に割り当てる部分が役立ちます。

于 2009-07-08T02:52:30.257 に答える
0

問題はNSLogではないようですが、実際にはstartServerが思ったように受信者に送信されていません。

于 2009-07-08T03:01:27.980 に答える
0

NSLog が端末に出力されない場合 (端末とは何かを説明してください)。端末は Xcode デバッガー コンソールであると仮定します。次に、Console.app が印刷されているかどうかを確認する必要があります。

Xcode の新しいバージョンには、この問題はありません。

于 2010-02-05T19:09:54.137 に答える