Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 使用AFNetworking 2.0发布请求-AFHTTPSessionManager_Objective C_Json_Post_Afnetworking_Afnetworking 2 - Fatal编程技术网

Objective c 使用AFNetworking 2.0发布请求-AFHTTPSessionManager

Objective c 使用AFNetworking 2.0发布请求-AFHTTPSessionManager,objective-c,json,post,afnetworking,afnetworking-2,Objective C,Json,Post,Afnetworking,Afnetworking 2,嘿 我正在为解析RESTAPI进行POST请求而苦苦挣扎。我正在使用AF2.0。我的AFHTTPSessionManager子类代码如下所示: + (ParseAPISession *)sharedSession { static ParseAPISession *sharedSession = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ share

我正在为解析RESTAPI进行POST请求而苦苦挣扎。我正在使用AF2.0。我的AFHTTPSessionManager子类代码如下所示:

+ (ParseAPISession *)sharedSession {
     static ParseAPISession *sharedSession = nil;
     static dispatch_once_t onceToken;
     dispatch_once(&onceToken, ^{
         sharedSession = [[ParseAPISession alloc] initWithBaseURL:[NSURL URLWithString:kSDFParseAPIBaseURLString]];
    });
   return sharedSession;
}
以及:

我是这样做的:

[[ParseAPISession sharedSession] POST:@"ClassName" parameters: [NSDictionary dictionaryWithObjectsAndKeys:@"name", @"name", nil] 
                              success:^(NSURLSessionDataTask *task, id abc) {
                                  NSLog(@"%@", abc);
                              } failure:^(NSURLSessionDataTask *task, NSError *error) {
                                  NSLog(@"%@", error);
}];
这样做我总是会遇到这样的错误:

Error Domain=NSCOCAERRORDOMAIN Code=3840“操作无法完成。(Cocoa错误3840)。”(JSON文本未以数组或对象开头,允许未设置片段的选项。)UserInfo=0x8c72420{NSDebugDescription=JSON文本未以数组或对象开头,允许未设置片段的选项。}

既然GET请求很有效,我很困惑为什么我不能发布一些东西。有人能用这个问题来阻止我吗

致以最良好的祝愿

更新

幸运的是,经过多次测试,该错误消息不再显示,不幸的是,出现了另一条错误消息:

<NSHTTPURLResponse: 0x8b96d40>
{ URL: https://api.parse.com/1/users }
{ status code: 400, 
headers {
    "Access-Control-Allow-Origin" = "*";
    "Access-Control-Request-Method" = "*";
    "Cache-Control" = "no-cache";
    Connection = "keep-alive";
    "Content-Length" = 130;
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Wed, 30 Oct 2013 20:01:58 GMT";
    Server = "nginx/1.4.2";
    "Set-Cookie" = "_parse_session=BAh7BkkiD3Nlc3Npb25faWQGOgZFRiIlNjIxZjUxMzY3NWVhZWJmMDYyYWYwMGJiZTQ3MThmMWE%3D--851bd31b07e7dba2c5f83bb13a8d801ecbea42c4; domain=.parse.com; path=/; expires=Fri, 29-Nov-2013 20:01:58 GMT; secure; HttpOnly";
    Status = "400 Bad Request";
    "X-Runtime" = "0.060910";
    "X-UA-Compatible" = "IE=Edge,chrome=1";
} }

{URL:https://api.parse.com/1/users }
{状态代码:400,
标题{
“访问控制允许来源”=“*”;
“访问控制请求方法”=“*”;
“缓存控制”=“无缓存”;
连接=“保持活动”;
“内容长度”=130;
“内容类型”=“应用程序/json;字符集=utf-8”;
日期=“2013年10月30日星期三20:01:58 GMT”;
Server=“nginx/1.4.2”;
“Set Cookie”=“_parse_session=bah7bkid3nlc3npb25fawqgogzfriilnjixjuxmzy3nwvhzwjmmdyyywwwwgjiztq3mtqmmwe%3D--851bd31b7e7dba2c5f83bb13a8d801ecbea42c4;domain=.parse.com;path=/;expires=Fri,2013年11月29日20:01:58 GMT;安全;HttpOnly”;
Status=“400错误请求”;
“X-Runtime”=“0.060910”;
“X-UA-Compatible”=“IE=Edge,chrome=1”;
} }

有人能告诉我400个坏请求告诉我的情况是什么,以及我如何摆脱它吗

此错误意味着您的POST请求已通过,服务器正在成功返回一些数据,而
NSJSONSerialization
在解析时遇到问题

您可能需要设置
AFJSONResponseSerializer
以允许JSON片段

AFHTTPSessionManager
子类的
init
方法中:

AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[self setResponseSerializer:responseSerializer];
如果这不起作用,您可能有编码问题。从
NSJSONSerialization
类参考:

数据必须采用JSON规范中列出的5种受支持的编码之一:UTF-8、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE。数据可能有也可能没有BOM表。用于解析的最有效的编码是UTF-8,因此如果您可以选择对传递给此方法的数据进行编码,请使用UTF-8

检查服务器发送的编码类型

最后,您可以在AFNetworking内部设置断点,也可以设置断点,这将在请求发送和接收到控制台时记录请求。此工具对调试此类问题非常有帮助。

这对我很有用:

AFHTTPSessionManager
子类中,使用以下序列化程序初始化它:

[self-setRequestSerializer:[AFHTTPRequestSerializer]];

[self-setResponseSerializer:[AFJSONResponseSerializer]]

(也可能服务器返回的不是JSON,在这种情况下,您根本不想使用
AFJSONResponseSerializer
)嘿,谢谢您的回复!我尝试过这个方法,但在这一刻,我收到了另一种错误消息(见上面的更新),我认为原来的问题不再是主要问题。。。。也许你也能帮我?你应该问一个单独的问题。您的请求不是正确的解析格式,服务器拒绝了它。(即,您现在遇到的是解析问题,而不是AFJSONRequestSerializer网络问题。)尝试将AFJSONRequestSerializer设置为您的AFHTTPRequestOperationManager,它对我有效:manager.requestSerializer=[AFJSONRequestSerializer serializer];
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[self setResponseSerializer:responseSerializer];