我想使用将指针指向NSError对象作为参数的方法来创建NSInvocation对象。这方面的一个例子是方法 -如何使用将指针指向对象的方法作为参数来创建NSInvocation对象
- (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr
我undersand,我会为我设置调用像这样
NSData *myData = [[NSData alloc] init];
SEL writeToFileSelector = @selector(writeToFile:options:error:);
NSMethodSignature *signature = [NSData instanceMethodSignatureForSelector:writeToFileSelector];
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
[invocation setTarget:myData];
[invocation setSelector:writeToFileSelector];
NSString *string = [NSString stringWithFormat:@"long cat"];
NSDataWritingOptions *dataOptions;
*dataOptions = NSDataWritingFileProtectionComplete;
[invocation setArgument:&string atIndex:2];
[invocation setArgument:&dataOptions atIndex:3];
对于将writeToFile:选项:错误:最后一个参数期望接收的指针而不是一个对象。其结果是执行以下操作不起作用 -
NSError *err = nil;
[invocation setArgument:&err atIndex:4];
这似乎是合乎逻辑的解决方案可能是创建一个指针的指针,但这会导致编译器警告。我不知道如何正确执行,不会造成内存管理问题。
“但是,既然你没有告诉它指向任何变量,它指向零。”什么?不,它没有定义 – user102008 2012-05-11 18:49:25
“现在你可以传入errorPointer作为参数”你不解释如何传递它。 – user102008 2012-05-11 18:50:13
#1在ARC下,未分配的本地指针变量被自动设置为零。在C或非ARC Obj-C中,你是正确的。 #2传递errorPointer作为第四个参数'[invocation setArgument:&errorPointer atIndex:4]' – edelaney05 2012-05-11 21:22:07