0

ARC および非 ARC プロジェクトを処理するように設定されたXMLRPC ライブラリを使用しています。NSError オブジェクトを渡そうとすると、次のエラーが発生します。

Implicit conversion of an Objective-C point to 'NSError *_autoreleasing *' is disallowed with ARC

そして警告:

Incompatible point types sending 'NSError *_strong' to parameter of type 'NSError *_autoreleasing *'

ここに方法があります:

+ (XMLRPCResponse *)sendSynchronousXMLRPCRequest: (XMLRPCRequest *)request error: (NSError **)error {
    NSHTTPURLResponse *response = nil;
#if ! __has_feature(objc_arc)
    NSData *data = [[[NSURLConnection sendSynchronousRequest: [request request] returningResponse: &response error: error] retain] autorelease];
#else
    NSData *data = [NSURLConnection sendSynchronousRequest: [request request] returningResponse: &response error: error];
#endif

    if (response) {
        NSInteger statusCode = [response statusCode];

        if ((statusCode < 400) && data) {
#if ! __has_feature(objc_arc)
            return [[[XMLRPCResponse alloc] initWithData: data] autorelease];
#else
            return [[XMLRPCResponse alloc] initWithData: data];
#endif
        }
    }

    return nil;
}

これが私の試みです:

NSError *myError;

XMLRPCResponse *serverResponse = [XMLRPCConnection sendSynchronousXMLRPCRequest:request error:myError];

私はに慣れていないと思います

#if

構文ですが、通常の If ステートメントと同じように機能すると思いますか?

ARCも有効にしています:

ここに画像の説明を入力

XMLRPCResponse メソッドをやり直して非 ARC プロジェクトの処理を削除する必要がありますか、それともエラー/警告が表示される理由はありますか?

4

1 に答える 1

1

ここでこの答えを見てください:

コンパイラでARCサポートが有効になっているかどうかを確認するにはどうすればよいですか?

どのコンパイラを使用していますか?サポートされていない可能性があります__has_feature

エラーに関して..あなたは次の線に沿って何かをする必要があります:

NSError *error = nil;
XMLRPCResponse *serverResponse = [XMLRPCConnection sendSynchronousXMLRPCRequest:request error:&error];

メソッドはエラー引数に対してダブルポインタを取るため。

于 2012-11-09T16:20:56.807 に答える