使用类别添加在Objective-C中采用块的方法

使用类别添加在Objective-C中采用块的方法,objective-c,objective-c-blocks,Objective C,Objective C Blocks,我认为这应该很容易,但我在编写一个简单的类级category方法时遇到了问题,该方法以一个块作为参数。下面是我尝试向NSAutoreleasePool添加类方法时的示例 #import <Foundation/Foundation.h> @interface NSAutoreleasePool (MyBlockAdditions) + (void)forWork: (void (^)(void))work; @end #import "NSAutoreleasePool+MetaS

我认为这应该很容易,但我在编写一个简单的类级category方法时遇到了问题,该方法以一个块作为参数。下面是我尝试向NSAutoreleasePool添加类方法时的示例

#import <Foundation/Foundation.h>
@interface NSAutoreleasePool (MyBlockAdditions)
+ (void)forWork: (void (^)(void))work;
@end

#import "NSAutoreleasePool+MetaSkillsAdditions.h"
@implementation NSAutoreleasePool (MyBlockAdditions)
+ (void)forWork: (void (^)(void))work {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  work();
  [pool release];
}
@end

[NSAutoreleasePool forWork:^{
  ...
}];
#导入
@接口NSAutoreleasePool(MyBlockAdditions)
+(作废)工作:(作废(^)(作废))工作;
@结束
#导入“NSAutoreleasePool+MetaSkillsAdditions.h”
@实现NSAutoreleasePool(MyBlockAdditions)
+(作废)工作:(作废(^)(作废))工作{
NSAutoreleasePool*池=[[NSAutoreleasePool alloc]init];
工作();
[池释放];
}
@结束
[NSAutoreleasePool for Work:^{
...
}];
我现在收到这个错误。我可能在做一些愚蠢的事情

2011-03-05 16:17:49.150 MyApp[28100:40b] +[NSAutoreleasePool forWork:]: unrecognized selector sent to class 0xb20598 2011-03-05 16:17:49.154 MyApp[28100:40b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[NSAutoreleasePool forWork:]: unrecognized selector sent to class 0xb20598' 2011-03-05 16:17:49.150 MyApp[28100:40b]+[NSAutoreleasePool for Work:]:发送到类0xb20598的无法识别的选择器 2011-03-05 16:17:49.154 MyApp[28100:40b]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“+[NSAutoreleasePool for Work:::无法识别的选择器发送到类0xb20598”
您是否已将类别头文件(
NSAutoreleasePool+MetaSkillsAdditions.h
)包含到包含调用新方法的代码的文件中?

它似乎对我有效。您确定实现该类别的文件实际上正在编译到应用程序中吗?

不导入标题将导致编译时警告,但与报告的运行时错误无关。是的,这与我疯狂的共享代码结构有关。现在修好。