Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
从php/json服务获取NSURLRequest(异步)中的数据_Php_Objective C_Json_Asynchronous_Nsurlconnection - Fatal编程技术网

从php/json服务获取NSURLRequest(异步)中的数据

从php/json服务获取NSURLRequest(异步)中的数据,php,objective-c,json,asynchronous,nsurlconnection,Php,Objective C,Json,Asynchronous,Nsurlconnection,从网站到iOS设备检索数据时遇到问题。web使用php文件从mySQL数据库读取一些数据。然后它以json格式发回数据 我使用以下代码来接收数据。代码被放入viewDidLoad。为了避免在不等待web响应的情况下执行与UI相关的代码,我将NSURLRequest/NSURLConnection操作放入带有GCD的异步队列中。尽管如此,console窗口仍显示NSLog,表明self.connectionData没有数据 这个结果与我将NSURLRequest/NSURLConnection操作

从网站到iOS设备检索数据时遇到问题。web使用php文件从mySQL数据库读取一些数据。然后它以json格式发回数据

我使用以下代码来接收数据。代码被放入viewDidLoad。为了避免在不等待web响应的情况下执行与UI相关的代码,我将NSURLRequest/NSURLConnection操作放入带有GCD的异步队列中。尽管如此,console窗口仍显示NSLog,表明self.connectionData没有数据

这个结果与我将NSURLRequest/NSURLConnection操作直接放入viewDidLoad函数的结果相同。你知道这里出了什么问题,为什么我不能得到数据

当我直接从浏览器运行php时,web服务运行良好

多谢各位

问候,, 保罗

-(void)viewDidLoad{
[超级视图下载];
dispatch\u queue\u t concurrentQueue=dispatch\u get\u global\u queue(dispatch\u queue\u PRIORITY\u DEFAULT,0);
调度异步(concurrentQueue^{
调度同步(concurrentQueue^{
NSString*URLASTRING=@”http://www.myexamplesite.com/loadProgram.php";
NSURL*url=[NSURL URLWithString:URLAString];
NSURLRequest*urlRequest=[nsurlRequestRequestWithURL:url
cachePolicy:nsurlRequestReloadIgnoringLocal和RemoteCacheData timeoutInterval:30.0F];
NSOperationQueue*队列=[[NSOperationQueue alloc]init];
[NSURLConnection sendAsynchronousRequest:urlRequest队列:队列
completionHandler:^(NSURLResponse*响应,NSData*数据,NSError*connectionError){
if([data length]>0&&connectionError==nil){
[self.connectionData-appendData:data];
NSLog(@“数据长度为%ld”,[self.connectionData-length]);
NSString*retString=[[NSString alloc]initWithData:self.connectionData编码:NSUTF8StringEncoding];
NSLog(@“json返回:%@”,retString);
}
else if([数据长度]==0&&connectionError==nil)
{NSLog(@“未下载任何内容!”);
}
else if(connectionError!=nil){
NSLog(@“错误发生=%@”,connectionError);
}
}];
});
});
}

您不初始化
self.connectionData
。因此,您需要在开始时提供以下内容:

if (!self.connectionData) {
    self.connectionData = [[NSMutableData alloc] init];
}

好的,这里有更多的信息。我刚刚更改了以下行:NSLog(@“datalength是%ld”,[self.connectionData length]);到NSLog(@“数据长度为%ld”,[数据长度]);结果证明completionHandler中的*数据对象确实收到了完整的数据。将*数据中的数据放入self.connectionData时,似乎出现了问题(这是一个在.h文件中定义的NSMutableData对象。谢谢,伙计!但是,请给我一个非常愚蠢的问题,为什么我仍然需要启动这个self.connectionData?我认为系统会自动启动它,因为它是在.h文件中定义的…@PaulLian属性由实例变量支持,因此它们必须以与任何其他属性相同的方式初始化。)其他变量。属性的访问器方法将自动合成。您可以查看详细信息。
if (!self.connectionData) {
    self.connectionData = [[NSMutableData alloc] init];
}