1

好的,所以我在 Objective-C 中使用 NSLog 已经有一段时间了,我知道它应该打印到终端,无论我放在括号中。出于某种原因,它刚刚停止打印到终端,我不知道如何解决这个错误。我想知道其他人会建议做什么来解决这个问题。我只包含了我的部分代码,因为我不想吓跑某人回答这个简单的(或者至少我希望它很容易解决)问题。当我运行代码时,仅有的两个打印语句是“serverButton - Stage 1”和“serverButton - Stage 2 - Complete”,但中间没有其他语句。仅供参考 -(void)startServer 在另一个名为“Server”的类中,我已将“server”设为指向该类的指针。

-(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,就像这样:

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 回答