将 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 我收到这个错误
[!]无法满足以下要求:
AFNetworking (~> 3.1.0)
Podfile
要求
AFNetworking (= 3.1.0)
Podfile.lock
要求
AFNetworking (~> 1.2.1)
AFRaptureXMLRequestOperation (1.0.2)
要求
这是我的完整 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;
}
}
我即将在 Objective C 中更新我们的 post 项目以满足仅支持 Ipv6 的新 Apple 要求。我的 AFNetworking
库现在是 1.2.1。我怀疑这是问题所在。我想更新到支持 IPv6 的最新版本,但是当 运行 pod install 我收到这个错误
[!]无法满足以下要求:
AFNetworking (~> 3.1.0)
Podfile
要求
AFNetworking (= 3.1.0)
Podfile.lock
要求
AFNetworking (~> 1.2.1)
AFRaptureXMLRequestOperation (1.0.2)
要求
这是我的完整 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;
}
}