【问题标题】:ARC Issue: No known instance method for selector 'appendPartWithFileData:mimeType:name:'ARC 问题:选择器“appendPartWithFileData:mimeType:name:”没有已知的实例方法
【发布时间】:2012-03-16 09:05:42
【问题描述】:

按照AFNetworking 示例上传表单时:

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:'

我该如何解决?

【问题讨论】:

    标签: objective-c ios automatic-ref-counting afnetworking


    【解决方案1】:

    编译器认为这是“ARC 问题”有点奇怪。恕我直言,AFMultipartFormData 协议不包含名为appendPartWithFileData:mimeType:name: 的方法。看一下文档,也许协议被重构了,方法签名有点变化。我不确定AFMultipartFormData 来自哪里,但简短的搜索给了我these docs,这表明您可能会成功使用appendPartWithFileData:name:fileName:mimeType:

    【讨论】:

    • appendPartWithFileDataAFHTTPClient.h 中。
    • 签名正确?我发现的所有版本的标头都只包含较长的版本,包括名称、文件名和 MIME。你看的头文件和你的编译器一样吗?
    • 这是一个 ARC 问题,因为没有 ARC,调用编译器不知道的选择器就可以了。只要有人实现了选择器,即使在运行时,也没有问题。你会收到警告。但是对于 ARC,编译器需要查看方法的原型,以查看是否有任何 __autoreleasing 或附加到它的其他属性,以确定应该如何调用它的机制。在没有看到这些规则的情况下,编译器将其称为错误。
    • 啊,谢谢,有道理。我总是将编译器设置为将警告视为错误,所以对我来说调用未知选择器已经是一个错误,ARC 与否。这就是为什么我认为错误消息很奇怪。
    【解决方案2】:

    我的 AFHTTPClient.h 中的签名如下所示:

    - (void)appendPartWithFileData:name:fileName:mimeType:
    

    并匹配文档here。可能只是样本过时了。

    更新:见SO answer: How do you upload multiple files with AFNetworking

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 2013-11-21
      相关资源
      最近更新 更多