我正在使用README文件(来自AFNetworking 2.0页面)中的一个简单示例来下载图像.对于直接从我的web服务器提供的图像,一切正常.但是对于那些位于S3上的人来说,web服务器返回302重定向以下错误:
Error Domain=NSURLErrorDomain Code=-999 "cancelled"
Run Code Online (Sandbox Code Playgroud)
当我尝试直接从S3下载图像(使用相同的代码)(省略重定向)时,我收到相同的错误.
我用wget检查了实际图像的可用性.该图像是公开的(https://youguide.s3.amazonaws.com/icons/user_96x96.png).
有人遇到过类似的问题吗?
我错过了什么吗?因为我希望应用程序接收响应并做一些事情,即使它在后台.这是我在我的应用中使用的内容:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = /*generate the parameters*/;
NSURL *filePath = [NSURL fileURLWithPath:@"imageName.png"];
[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:filePath name:@"image" error:nil];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
//debug here
//Told the app to stop the Loading View, save response to DB
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
//debug here
//Told the app to stop the Loading View and try again sometimes
}];
Run Code Online (Sandbox Code Playgroud) 之所以要求你这样做是因为我对params感到困惑.
据我所知,有一种方法可以使用多部分请求.
这种方式为我们提供了两个概念,因为我理解从文件上传,可以存储在Document目录中或使用NSData对象.
从文件上传:
所以我将test.jpg保存到文档目录中.然后我让NSURL实例在多部分请求中使用它.下面的代码显示了我如何创建NSURL实例:
NSString *fileName = @"test.jpg";
NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:fileName];
NSURL *filePath = [NSURL fileURLWithPath:folderPath];
Run Code Online (Sandbox Code Playgroud)
当我打印文件路径时:
file:///Users/mac/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/F732FCF6-EAEE-4E81-A88B-76ADB75EDFD1/Documents/test.jpg
Run Code Online (Sandbox Code Playgroud)
然后我设置我的参数并使用formData附加我的文件,如下所示:
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
NSDictionary *parameters = @{@"foo": @"bar"};
NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
[manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileURL:filePath name:@"image" error:nil];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success: %@", responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
Run Code Online (Sandbox Code Playgroud)
它是否正确?或者我可能会错过一些东西因为回应不成功?
第二个概念 - 直接处理数据:
[formData appendPartWithFileData:imageData name:@"image" fileName:@"test.jpg" mimeType:@"image/jpeg"];
Run Code Online (Sandbox Code Playgroud)
但当应用程序调用这行代码时,我收到错误:
*** Terminating app due …Run Code Online (Sandbox Code Playgroud) 我正在使用AFNetworking进行POST请求.我需要等到完成块完成才能返回数据,我遇到了问题.
我有一个解决方案,直到我切换到AFNetworking:
int i = 0;
while (!done)
{
[NSRunLoop.currentRunLoop runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]];
i++;
NSLog(@"While Loop:%i", i);
if (i == 149) //request timed out
done = YES;
}
Run Code Online (Sandbox Code Playgroud)
现在,解决方案偶尔会起作用.有时它只用NSLog(@"While Loop:%i", i);1或2记录完成,但有时它会记录到149并超时.似乎NSRunLoop有时会在不同的线程中运行,但有时会在阻止我的请求的同一线程上运行.
这是我目前的代码:
- (id)postRequestWithBaseURLString:(NSString *)baseURLString function:(NSString *)function parameters:(NSDictionary *)parameters
{
if (baseURLString)
function = [baseURLString stringByAppendingString:function];
__block BOOL done = NO;
__block id returnObject = nil;
[self.manager POST:function parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject)
{
NSLog(@"Success: %@", responseObject);
done = YES;
returnObject = responseObject;
}
failure:^(AFHTTPRequestOperation *operation, NSError …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用AFHTTPSessionManager向Web服务发送请求
这是我的问题:我想发送带有JSON格式参数的URL GET请求.像这样: http://api.mysite.com/v2/json/search ? parameter = {"api_key":"YOUR_API_ KEY","查询":{"perpage":50}}
我已经将AFHTTPSessionManager子类化了.这是我的代码的样子:
+ (MyAPIClient *)sharedClient {
static MyAPIClient *_sharedClient = nil;
static dispatch_once_t oncePredicate;
dispatch_once(&oncePredicate, ^{
_sharedClient = [[self alloc] initWithBaseURL:[NSURL URLWithString:kBaseURLString]];
});
return _sharedClient;
}
Run Code Online (Sandbox Code Playgroud)
和初始化者:
- (instancetype)initWithBaseURL:(NSURL *)url {
self = [super initWithBaseURL:url];
if (!self) {
return nil;
}
self.responseSerializer = [AFJSONResponseSerializer serializer];
self.requestSerializer = [AFJSONRequestSerializer serializer];
return self;
}
Run Code Online (Sandbox Code Playgroud)
所以这就是我做的方式:
- (void)sendMyQueryWithSuccess:
(void(^)(NSURLSessionDataTask *task, id responseObject))success
andFailure:(void(^)(NSURLSessionDataTask *task, NSError *error))failure{
NSDictionary *params = @{@"api_key" : kAPIKey,
@"query": @{@"perpage": …Run Code Online (Sandbox Code Playgroud) 我正在尝试检查next_max_id我的JSON响应字典中的密钥是否存在对象.我尝试了以下方法来检查:
if ([[pagination objectForKey:@"next_max_id"] isKindOfClass:[NSNull class]]) ...if ([pagination objectForKey:@"next_max_id"] == [NSNull class]) ...if ([pagination objectForKey:@"next_max_id"]) ...但是,当分页字典为空即ie(pagination = {};)时,我收到以下错误消息:
-[NSNull objectForKey:]: unrecognized selector sent to instance ...
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull objectForKey:]: unrecognized selector sent to instance ...
Run Code Online (Sandbox Code Playgroud)
如何在没有崩溃的情况下检查对象或密钥是否存在?
更新:当密钥next_max_id存在于内部时pagination,JSON响应将是这样的
"pagination": {
"next_url": "https://api.instagram.com/v1/tags/puppy/media/recent?access_token=fb2e77d.47a0479900504cb3ab4a1f626d174d2d&max_id=13872296",
"next_max_id": "13872296"
}
Run Code Online (Sandbox Code Playgroud) 我知道这个问题已被多次回答,但我没有运气就尝试了所有答案.我不认为我做了一些根本错误的事情,但这里肯定是错的.
我使用以下代码将PNG文件上传到tinypng.com.据我所知,上传本身有效,但收到错误消息:请求失败:不支持的媒体类型(415)
我使用的图像以JPEG格式加载,然后调整大小并转换为PNG格式.保存的文件很好.现在我想在将它们保存到光盘之前将它们发送到TinyPNG API.
如果有人有任何想法错误或有这方面的经验,请告诉我.提前致谢!
详细的错误消息
Error Domain=com.alamofire.error.serialization.response Code=-1011 "Request failed: unsupported media type (415)"
UserInfo=0x6000000e4900 {
com.alamofire.serialization.response.error.response=<NSHTTPURLResponse: 0x600000220200> { URL: https://api.tinypng.com/shrink }
{
status code: 415, headers {
Connection = "keep-alive";
"Content-Length" = 77;
"Content-Type" = "application/json; charset=utf-8";
Date = "Tue, 16 Dec 2014 20:24:16 GMT";
Server = "Apache/2";
"Strict-Transport-Security" = "max-age=31536000";
"X-Powered-By" = "Voormedia (voormedia.com/jobs)";
}
},
NSErrorFailingURLKey=https://api.tinypng.com/shrink,
com.alamofire.serialization.response.error.data=<7b226572 726f7222 3a224261 64536967 6e617475
7265222c 226d6573 73616765 223a2244 6f657320 6e6f7420 61707065 61722074 6f206265 20612050
4e47206f 72204a50 …Run Code Online (Sandbox Code Playgroud) 尝试使用 Xcode 7.1.1 从终端编译 iOS 项目时出现链接错误:
xcodebuild -project MyProject.xcodeproj -configuration 调试 -target MyProject 构建
结果我收到下一个错误:
ld:找不到 AFNetworking 框架
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
这是我的 pod 文件:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!
target "MyProject" do
pod "AFNetworking", "~> 2.0"
pod 'GoogleMaps'
pod 'MONActivityIndicatorView'
pod 'NYXImagesKit'
pod 'MagicalRecord'
pod 'FBSDKCoreKit'
pod 'FBSDKShareKit'
pod 'FBSDKLoginKit'
pod 'Countly'
end
xcodeproj 'MyProject'
Run Code Online (Sandbox Code Playgroud)
我也尝试添加 link_with 但得到相同的错误。如何解决上述问题?
如何在AFNetworking 2.0中复制此NSURLConnection代码?
NSString *post = @"key=xxx";
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:@"http://test.com/"]];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
[request setHTTPBody:postData];
NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn start];
Run Code Online (Sandbox Code Playgroud) 当我使用cocoapods将AFNetworking添加到我的工作区时,一切似乎都已到位,但我无法在我的代码中实例化任何AFHTTPClient实例.文件:AFHTTPClient.h和.m不存在于AFNetworking层次结构中的任何位置.
目前,我的Podfile看起来像这样:
platform :ios, '7.0'
pod 'AFNetworking', '~> 2.0'
pod 'Parse', '1.2.17'
Run Code Online (Sandbox Code Playgroud)
我的CLI pod update命令从终端运行正常,如下所示:
nmaster >> pod update
Analyzing dependencies
Downloading dependencies
Using AFNetworking (2.0.3)
Using Facebook-iOS-SDK (3.11.0)
Using Parse (1.2.17)
Generating Pods project
Integrating client project
Run Code Online (Sandbox Code Playgroud)
我在代码中看到的错误如下所示:

我看过一些帖子提到HEADER SEARCH PATH不足,但我已经确认文件本身不存在.AFHTTPClient已被弃用吗?我确实在Ray W.的AFHTTPClient.h和.m文件的教程中找到了一个副本,并尝试将它们拖放到我的项目中,但这导致了重复的引用和其他问题.
任何人都有任何想法我应该在哪里解决这个问题?
谢谢,菲尔
afnetworking-2 ×10
ios ×7
afnetworking ×3
objective-c ×3
cocoapods ×2
ios7 ×2
amazon-s3 ×1
get ×1
https ×1
json ×1
macos ×1
networking ×1
nsimage ×1
xcode ×1