【发布时间】:2012-04-03 03:58:11
【问题描述】:
我想使用一个方法创建一个 NSInvocation 对象,该方法将一个指向 NSError 对象的指针作为参数。一个例子就是方法 -
- (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr
我明白我会这样设置我的调用
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:Options:Error:最后一个参数期望接收指针而不是对象。因此,执行以下操作不起作用 -
NSError *err = nil;
[invocation setArgument:&err atIndex:4];
解决方案可能是创建指向指针的指针似乎是合乎逻辑的,但这会导致编译器警告。我不确定如何正确执行它并且不会产生内存管理问题。
【问题讨论】:
标签: ios cocoa-touch automatic-ref-counting nserror nsinvocation