Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.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 ASIHttpRequest&x27;通过NSO操作进行构建时,s的post body有时为空_Objective C_Ios_Memory Leaks_Asihttprequest - Fatal编程技术网

Objective c ASIHttpRequest&x27;通过NSO操作进行构建时,s的post body有时为空

Objective c ASIHttpRequest&x27;通过NSO操作进行构建时,s的post body有时为空,objective-c,ios,memory-leaks,asihttprequest,Objective C,Ios,Memory Leaks,Asihttprequest,我有一个设置,我使用ASIHttpRequest在后台NSOperation子类中进行服务调用。在NSO操作中,我从main()调用了一个方法,并让该方法执行并使用适当的URL、头、正文等构建我的请求。问题是,我偶尔会看到请求正文设置为null,而不是预期值。在将其设置为请求之前,我打印出预期的主体应该是正确的,并且表示形式不为null,因此我不知道ASIHttpRequest的请求主体在哪里/如何发布 下面是我如何设置请求主体的一些示例代码。。。此方法由另一个控制整个网络工作流的驱动程序方法调

我有一个设置,我使用ASIHttpRequest在后台NSOperation子类中进行服务调用。在NSO操作中,我从main()调用了一个方法,并让该方法执行并使用适当的URL、头、正文等构建我的请求。问题是,我偶尔会看到请求正文设置为null,而不是预期值。在将其设置为请求之前,我打印出预期的主体应该是正确的,并且表示形式不为null,因此我不知道ASIHttpRequest的请求主体在哪里/如何发布

下面是我如何设置请求主体的一些示例代码。。。此方法由另一个控制整个网络工作流的驱动程序方法调用。然后,该方法由我的NSOperation的main()方法调用

 + (ASIHTTPRequest*) buildRequestForProjectModify: (ANVideoProject*) theProject {

    if (theProject.selfUrl == nil) return nil; //Can't do anything if we don't have a project url. 

    NSString* projectPutUrl = theProject.selfUrl;
    ASIFormDataRequest* request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:projectPutUrl]];
    [ANAppsServiceHelper addStandardHeadersToRequest:request];

    NSDictionary* projectDict = [theProject jsonFriendlyForSaveAndPreview];
    ANLogInfo(@"\n\nProject Post body: \n%@\n\n", projectDict); //This will print out ok
    ANLogInfo(@"\n\nProject Post Body as JSON\n%@\n\n", [projectDict JSONRepresentation] ); //this too prints out ok. 
    NSString* jsonRep = [projectDict JSONRepresentation];
    NSData* pd = [jsonRep dataUsingEncoding:NSUTF8StringEncoding];
    [request appendPostData:pd];
    [request setRequestMethod:@"PUT"];


    return request; //I have a problem in the calling method from here where the request body is now null. 
}
我在NSOperation子类的main方法中阅读了有关设置自动释放池的内容,因此我在main方法的顶部进行了此操作。当我这样做时,请求主体的(null)出现的次数有所减少,但在我调用此操作的大约1/4时间里仍然发生。奇怪的是,请求的其他部分似乎从未以这种随机方式设置为null(即请求方法或头)。下面是我上面提到的驱动程序方法的日志输出,打印出返回的请求:

Here is Modify the request: https://<service-url>/projects/p0FvVjc790MFWduhhqUStA
Here is the request headers: {
    Accept = "application/json";
    "Accept-Encoding" = gzip;
    Authorization = "Bearer <key>";
    "Content-Length" = 293;
    "Content-Type" = "application/json";
    "User-Agent" = "iPhone (OS 4.3.2)";
}
Here is the request method: PUT
Here is the request body: (null)
下面是修改请求:https:///projects/p0FvVjc790MFWduhhqUStA
以下是请求标头:{
Accept=“application/json”;
“接受编码”=gzip;
授权=“持票人”;
“内容长度”=293;
“内容类型”=“应用程序/json”;
“用户代理”=“iPhone(OS 4.3.2)”;
}
下面是请求方法:PUT
这是请求主体:(null)
更新:


所以我注意到的一件事是,有时候请求体是空的,有时候在请求体的末尾添加了一些垃圾数据(有时候请求体完全没有问题)。更奇怪的是,请求实际上总是成功地通过我想要添加的主体(即使打印输出看起来很糟糕)。这表明ASIHttpRequest中一切正常,但可能是我打印请求状态的方式有问题,或者ASIHttpRequest和我使用的SBJSon库之间存在其他问题,导致请求不时看起来损坏(尽管它显然没有损坏)

您打印出pd(NSData*)的内容了吗?尺寸很大吗?然后,您可能需要从磁盘流式传输post数据:

[request setRequestMethod:@"PUT"];
[request setPostBodyFilePath:@"/Users/ben/Desktop/another-big-one.txt"];
[request setShouldStreamPostDataFromDisk:YES];

这个尺寸不大。。没有图像或任何东西,只有几行文字。