将 AFNetworking 从版本 1.2.1 更新到 3.1.0

Update AFNetworking from version 1.2.1 to 3.1.0

我即将在 Objective C 中更新我们的 post 项目以满足仅支持 Ipv6 的新 Apple 要求。我的 AFNetworking 库现在是 1.2.1。我怀疑这是问题所在。我想更新到支持 IPv6 的最新版本,但是当 运行 pod install 我收到这个错误

[!]无法满足以下要求:

这是我的完整 pod 文件

platform :ios, '7.0'

def shared_pods
    pod 'RaptureXML'
    pod 'Realm'
end

def ios_pods

    pod 'AFRaptureXMLRequestOperation'
    pod 'GoogleAnalytics-iOS-SDK', '~> 3.0.9'
    pod 'KGModal', '~> 0.0.1'
    pod 'MagicalRecord'
    pod 'MHNatGeoViewControllerTransition', '~> 1.0'
    pod 'SVProgressHUD', '~> 1.0'
    pod 'UALogger', '~> 0.2.3'
    pod 'Reachability', '~> 3.1.1'
    pod 'RegexKitLite', '~> 4.0'
    pod 'SSKeychain', '~> 1.2.1'
    pod 'TTTAttributedLabel'
    pod 'TPKeyboardAvoiding', '~> 1.1'
    pod 'UIAlertView+Blocks', '~> 0.7'
    pod 'UIActivityIndicator-for-SDWebImage', '~> 1.0.3'
    pod 'SevenSwitch', '~> 1.3.0'
    pod 'ZXingObjC', '~> 3.0'
    pod 'DeviceUtil', '~> 1.2'
end

有什么方法可以在 AFNetworking 3.0 中使用 AFRaptureXMLRequestOperation 吗?或任何其他解决方案?非常感谢任何帮助。谢谢

AFRaptureXMLRequestOperation subclasses AFHTTPRequestOperation,但是这个 class 在 AFNetworking 3.x 中已经不存在了。您将无法将 AFRaptureXMLRequestOperation 与 AFNetworking 3.x.

一起使用

如果您只是使用 AFNetworking 3.x 解析 XML 响应,您可以使用 AFXMLParserResponseSerializer。它returns一个NSXMLParser

因此,为 responseObject 设置 delegate,然后对其调用 parse

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"application/rss+xml"];  // this line is only needed if parsing RSS feed

[manager GET:@"https://developer.apple.com/news/rss/news.rss" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
    NSXMLParser *parser = responseObject;
    parser.delegate = self;
    self.titles = [NSMutableArray array];
    [parser parse];
    NSLog(@"%@", self.titles);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    NSLog(@"%@", error);
}];

不过,您必须自己编写 NSXMLParserDelegate 代码。因此,为了从 Apple 的 RSS 提要的 XML 中解析出标题,我添加了两个属性:

@property (nonatomic, strong) NSMutableArray *titles;
@property (nonatomic, strong) NSMutableString *elementValue;

然后实现了以下NSXMLParserDelegate方法:

- (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary<NSString *,NSString *> *)attributeDict {
    if ([elementName isEqualToString:@"title"]) {
        self.elementValue = [NSMutableString string];
    }
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)string {
    [self.elementValue appendString:string];
}

- (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName {
    if ([elementName isEqualToString:@"title"]) {
        [self.titles addObject:self.elementValue];
        self.elementValue = nil;
    }
}