我不知道为什么

use of undeclared identifier _cmd  did you mean rcmd

在NSAssert所在的行上。
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[])
{

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    int x = 10;

    NSAssert(x > 11, @"x should be greater than %d", x);

    [pool drain];
    return 0;
}

最佳答案

在每个Objective-c方法中,都有两个隐藏的变量id selfSEL _cmd
所以

- (void)foo:(id)bar;

是真的
void foo(id self, SEL _cmd, id bar) { ... }

当你打电话时
[someObject foo:@"hello world"]

它实际上是
foo( someObject, @selector(foo), @"hello world")

如果您按cmd单击NSAssert跳转到它的定义,您将看到它是一个宏,它使用了从其调用方法的隐藏_cmd变量。这意味着,如果您不在Objective-c方法内部(也许您位于“main”中),因此没有_cmd参数,则不能使用NSAssert。

相反,您可以使用替代的NSCAssert。

关于objective-c - 奇怪的错误NSAssert,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9739460/

10-13 03:56