Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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
Ios AF2.0网络可以';t发送到DJANGO(接收到消息)_Ios_Objective C_Django_Afnetworking 2 - Fatal编程技术网

Ios AF2.0网络可以';t发送到DJANGO(接收到消息)

Ios AF2.0网络可以';t发送到DJANGO(接收到消息),ios,objective-c,django,afnetworking-2,Ios,Objective C,Django,Afnetworking 2,我在尝试从iOS设备与Django API通信并发布NSDictionary时遇到了最奇怪的问题,但似乎无法使其正常工作。 奇怪的是:同样的代码就像一个魔咒,与RubyAPI对话 这是我的ObjC方法: - (void)makePostToServerWithClass:(NSString *)stringClass object:(NSDictionary *)parametersDict success:(void (^)(AFHTTPRequestOperation *operation,

我在尝试从iOS设备与Django API通信并发布NSDictionary时遇到了最奇怪的问题,但似乎无法使其正常工作。 奇怪的是:同样的代码就像一个魔咒,与RubyAPI对话

这是我的ObjC方法:

- (void)makePostToServerWithClass:(NSString *)stringClass object:(NSDictionary *)parametersDict success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
{ [[UIApplication sharedApplication]设置网络活动指示器可见:是]

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
[manager setRequestSerializer:[AFJSONRequestSerializer serializer]];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
[manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];

manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/html"];

__block NSError *errorMessage;

NSMutableURLRequest *request = [manager.requestSerializer requestWithMethod:@"POST" URLString:[baseURLString stringByAppendingString:stringClass] parameters:parametersDict error:&errorMessage];
[request setTimeoutInterval:120];

AFHTTPRequestOperation *operation = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) {
    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
    success(operation, responseObject);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@", operation.responseString);
    NSLog(@"ERROR2: %@", errorMessage.description);
    NSLog(@"ERROR3: %@", error.description);

    if(operation.responseObject)
        errorMessage = [self creteErrorMessageForOperation:operation error:error];

    [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
    failure(operation, errorMessage);
}];

[manager.operationQueue addOperation:operation];
}

在该代码中,URLString将是:

@"http://linuxServerIP:8080/api/v1/create_user/"
参数DICT将是一个NSDictionary,包含:

(lldb)po参数DICT

{ “原始密码”=1234; username=testuser;}

在Linux服务器上,Django调试打印:

[28/Mar/2014 13:04:29]“GET/api/v1/create_user/HTTP/1.1”4054

我在iOS上遇到的错误是:

错误3:错误域=NSCOCAERRORDOMAIN代码=3840“操作 无法完成。(Cocoa错误3840。)(JSON文本未启动 使用数组或对象,并选择允许不设置片段。) UserInfo=0xb44e5b0{NSDebugDescription=JSON文本未以开头 数组或对象以及允许未设置片段的选项。, NSUnderlyingError=0xb44e860“请求失败:不允许使用方法 (405)“}

最奇怪的是:我发送了一篇帖子,Linux服务器将错误打印为GET

你们知道我做错了什么吗?
正如我之前所说,它在Ruby API上运行良好。

您应该从AFNetworking尝试此函数:-

(AFHTTPRequestOperation *)POST:(NSString *)URLString
                      parameters:(NSDictionary *)parameters
       constructingBodyWithBlock:(void (^)(id <AFMultipartFormData> formData))block
                         success:(void (^)(AFHTTPRequestOperation *operation, id responseObject))success
                         failure:(void (^)(AFHTTPRequestOperation *operation, NSError *error))failure
(AFHTTPRequestOperation*)POST:(NSString*)URLString
参数:(NSDictionary*)参数
带块构造体:(void(^)(id formData))块
成功:(void(^)(AFHTTPRequestOperation*操作,id responseObject))成功
失败:(void(^)(AFHTTPRequestOperation*操作,NSError*错误))失败

为了防止有人在任何时候遇到同样的问题,这个问题是因为我使用了一个名为RNCachingURLProtocol的POD来缓存从UIWebview检索到的图像和HTML页面。 由于某种原因,这个POD干扰了AFN网络,不允许它发出POST请求。
一旦我删除了RNCachingURLProtocol,一切都很顺利。

我认为,如果这段代码在使用ruby的服务器上运行,而不是在使用django的服务器上运行,那么服务器实现就不好了。不幸的是,它不能正常工作。这就是该方法的结局:[manager POST:@“parameters:@{“username:@“userTest”,“password:@“123”}success:^(AFHTTPRequestOperation*operation,id responseObject){NSLog(@“success”);}failure:^(AFHTTPRequestOperation*operation,NSError*error){NSLog(@“FAILED:%@”,error.description);}];