NSError オブジェクトへのポインターを引数として取るメソッドを使用して、NSInvocation オブジェクトを作成したいと考えています。この例は、メソッドです-
- (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];
解決策がポインターへのポインターを作成することであることは論理的に思えますが、これによりコンパイラーの警告が発生します。それを適切に実行し、メモリ管理の問題を引き起こさないようにする方法がわかりません。