Cocoa/Objective-C NSProcessInfo 异常情况

11

我刚开始学习Objective-C、Cocoa和iPhone开发。然而,我遇到了一个小问题,不太理解。

我正在尝试获取进程信息,进程名称可以正常工作,但是当我尝试获取进程ID时,情况变得奇怪起来。

这是我的一段代码,显然没有将任何内容输出到控制台:

NSProcessInfo *processInfo = [NSProcessInfo processInfo];
NSString *processName = [processInfo processName];
int processID = [processInfo processIdentifier];
NSLog(@"Process Name: '%@' Process ID:'%@'", processName, processID);

在这段代码块之后,所有其他的 NSLog 调用也会被忽略。而进程会继续运行并在控制台中声明有关 GDB 的信息:

Loading program into debugger… GNU gdb 6.3.50-20050815 (Apple version gdb-962) (Sat Jul 26 08:14:40 UTC 2008) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-apple-darwin".Program loaded. sharedlibrary apply-load-rules all Attaching to program: '/Users/jim/Documents/Xcode Projects/CS 193P/Assignment1B (WhatATool)/WhatATool/build/Debug/WhatATool', process 28700. (gdb)

我可能有点傻,在 Objective-C 中我从没有进行过处理... 哈哈 __吹口哨表示无辜__


这是斯坦福的作业任务 :) 很好。 - Jack Marchetti
4个回答

25

这行代码

NSLog(@"Process Name: '%@' Process ID:'%@'", processName, processID);

应该是这样

NSLog(@"Process Name: '%@' Process ID:'%d'", processName, processID);
/*                          change here ^                          */

由于processID只是一个int而不是Objective-C对象


2
谢谢,我刚刚测试了一下 :D我几乎忘记了当一个n00b(新手)的感觉,有点好玩,也有点尴尬... 哈哈 - jimeh
你也可以使用stringWithFormat,这就是我完成任务的方式。 - Jack Marchetti

0
也许可以像这样不使用NSLOG,而是使用printf: 您可能需要清理输出,但它应该可以编译和工作。 不确定是否应该这样做,但从我的测试来看似乎可以工作。
void PrintProcessInfo() 
{
    int pid = [[NSProcessInfo processInfo] processIdentifier];
    printf("ProcessInfo is : %d \n", pid);
}

0
"int" 不是 Objective-C,所以删掉 "int" 后面的 * 就可以了。

你可能需要注意到,你实际上是在评论Fredrick的非答案,而不是回答原问题。此外,Sören Kuklau已经在那个非答案的评论中指出了他的问题。 - Peter Hosey

0

"do %i" 用于整数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接