我不知道为什么
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 self
和SEL _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/