NSErrorオブジェクトへのポインタを引数として取るメソッドを使用してNSInvocationオブジェクトを作成したいとします。この例は方法だろう - 私はWRITETOFILEについては、このオブジェクトへのポインタを引数として取るメソッドを使用してNSInvocationオブジェクトを作成する方法
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];
ように私の呼び出しを設定することをundersand
- (BOOL)writeToFile:(NSString *)path options:(NSDataWritingOptions)mask error:(NSError **)errorPtr
:オプション:エラー:最後の引数はポインタを受け取ることを期待していますオブジェクトの代わりに。
NSError *err = nil;
[invocation setArgument:&err atIndex:4];
それは解決策は、ポインタへのポインタを作成するかもしれないと論理的なようだが、これはコンパイラの警告が発生する - 動作しない次の操作を実行した結果。私はそれを正しく実行し、メモリ管理の問題を作成しない方法がわかりません。
"しかし、変数を指すように指示していないので、nilを指しています。"何?いいえ、定義されていません – user102008
"errorPointerを引数として渡すことができるようになりました。"これを渡す方法は説明していません。 – user102008
#1 ARCでは、未割り当てのローカルポインタ変数は自動的にnilに設定されます。 Cまたは非ARC Obj-Cでは正しいです。 #2 errorPointerを第4引数 '[invocation setArgument:&errorPointer atIndex:4]'に渡すには – edelaney05