2012-03-16 7 views
1

フォームをアップロードするAFNetworking次の例の場合:ARC問題:セレクタに対する既知インスタンスメソッド 'appendPartWithFileData:MIMEタイプ:名:'

NSURL *url = [NSURL URLWithString:@"https://www.example.com/"]; 
AFHTTPClient *client = [[AFHTTPClient alloc] initWithBaseURL:url]; 

NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: 
         keyField.text, @"key", 
         valField.text, @"val", 
         nil]; 

NSData *imageData = UIImagePNGRepresentation(image); 

NSURLRequest *request = [client multipartFormRequestWithMethod:@"POST" 
                  path:@"/upload" 
                parameters:params 
            constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) { 
             [formData appendPartWithFileData:imageData 
                   mimeType:@"image/png" 
                    name:@"avatar"]; 
            }]; 

コンパイルエラーを返し:

ARC Issue: No known instance method for selector 'appendPartWithFileData:mimeType:name:' 

どのように私が直します?

答えて

1

コンパイラがこれを「ARCの問題」とみなすのは少し奇妙です。 IMHOのAFMultipartFormDataプロトコルには、appendPartWithFileData:mimeType:name:というメソッドは含まれていません。ドキュメンテーションを見て、おそらくプロトコルがリファクタリングされ、メソッドのシグネチャが少し変わったかもしれません。 AFMultipartFormDataはどこから来たのか分かりませんが、短い検索でが成功する可能性があることを示唆するthese docsが見つかりました。私AFHTTPClient.hで

+0

は 'appendPartWithFileData'がAFHTTPClient.h''である参照してください。 – ohho

+0

正しい署名がありますか?私が見つけたすべてのバージョンのヘッダーには、名前、ファイル名、およびMIMEを含む長いバージョンが含まれています。コンパイラと同じヘッダーを見ていますか? – zoul

+0

これはARCの問題です。なぜなら、ARCがなければ、コンパイラが知らないコールセレクタがうまくいくからです。誰かがセレクタを実装している限り、実行時にも問題はありません。あなたは警告を受ける。しかし、ARCでは、コンパイラはメソッドのプロトタイプを参照して、どのように呼び出すべきかを決定するために、__autoreleasingまたは他の属性が付加されているかどうかを調べる必要があります。これらのルールを見ることなく、コンパイラは代わりにエラーを呼び出します。 –

関連する問題