用于获取数据的 Web 服务在 ios 6 中返回 null 但在 ios 7 中不返回

Posted

技术标签:

【中文标题】用于获取数据的 Web 服务在 ios 6 中返回 null 但在 ios 7 中不返回【英文标题】:Web service to fetch data return null in ios 6 but not in ios 7 【发布时间】:2013-09-25 07:46:27 【问题描述】:

我正在使用 Web 服务来获取数据并从服务器返回一组数据,这在我安装 xcode 5 之前效果很好,以前我的应用程序与 ios6 兼容,现在我更改为 ios 7。现在我有一个问题,而从网络服务获取数据。

当我第一次进入 UIViewController 视图时,我在 -(void)ViewDidLoad 中调用 Web 服务并且没有数据返回,如果我再调用一次(不从视图返回,我再次调用相同的 Web 服务)它会返回数据,当我第一次调用它返回空数据但第二​​次返回数据时,这发生在 ios 6 中,但相同的代码在 ios 7 中没有任何 Web 服务问题。在我更改后

我正在接收来自服务器的响应,但里面的数据第一次为空,但同时我在 ios 7 设备中运行它的返回数据,所以我不明白我错在哪里??????

 NSMutableData *serverData;
 //delegate methods for NSURLConnection
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

      NSString *str = [[NSString alloc] initWithData:serverData encoding:NSUTF8StringEncoding];//here i am initializing 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data

      [serverData appendData:data]; // here i get data that is null but i get response from server





Myviewwillappear code here...
- (void)viewWillAppear:(BOOL)animated 
[self performSelector:@selector(GetDataFromServer) withObject:nil afterDelay:0.001];

- (void) GetDataFromServer 
NSString *soapMessage = [NSString stringWithFormat:@"<?xml version=\"1.0\" encoding=\"utf-8\"?>"

                         @"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"

                         @"<soap:Body>"

                         @"<GetProductList xmlns=\"http://tempuri.org/\">"

                         @"<inCompany>%@</inCompany>"

                         @"<inUserName>%@</inUserName>"

                         @"<inType>%@</inType>"

                         @"<inTypeValue>%@</inTypeValue>"

                         @"<inSearchVal>%@</inSearchVal>"

                         @"<inPage>%@</inPage>"

                         @"</GetProductList>"

                         @"</soap:Body>"

                         @"</soap:Envelope>",Company,Username,type,typevalue,searchval,page];



NSURL *url = [NSURL URLWithString:PVBASE_URL];

NSString *msgLength = [NSString stringWithFormat:@"%d",[soapMessage length]];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];

[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];

[request addValue:PVPRODUCTLIST forHTTPHeaderField:@"SOAPAction"];

[request setHTTPMethod:@"POST"];

[request addValue:msgLength forHTTPHeaderField:@"Content-Length"];

[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding]];

connection = [[NSURLConnection alloc] initWithRequest:request delegate:self];

if (connection) 



    if (serverData) 



        serverData = nil;

    

    serverData = [[NSMutableData alloc] init];



connection = nil;
 

【问题讨论】:

能发一些相关的sn-ps代码吗? @CarlJ 我添加了有问题的代码,我收到了来自服务器的响应,但在 xml 标记中,数据为空,这是下一次第一次获取数据时,所以每当我第一次去那个视图时,返回数据包含空ios 6 设备,我在 ios 7 设备上进行了测试,我也没有遇到这样的问题。那你能告诉我哪里错了吗??? 我遇到了一个相关问题,即我的 didReceiveResponse 函数从服务器获得响应,但没有附加数据。在标题中没有内容长度?此功能在 iOS 6 中运行良好,但在 iOS 7 和 Xcode 5 中,我遇到了这个问题。我想听更多? 【参考方案1】:

基本上,我已经多次计算过这个问题,因为当 viewDidLoad 执行时没有得到任何数据,但从 IBaction 的显式调用却得到了。这与iOS无关。您的网络服务调用的基本问题。

您可能正在使用未执行或初始化的公共变量调用数据。 请提供您的代码以便更好地理解。

谢谢!!

【讨论】:

是的,我以前遇到过这个问题,从服务器返回的数据有时是空的,我通过初始化解决了这个问题。我将在我的问题中添加代码,请通过它。【参考方案2】:

我想我会在这里分享我的答案作为可能的解决方案。我在 iOS6 上遇到了类似的问题,当我升级到 iOS7 时,网络堆栈似乎无法正常工作,因为我没有在 NSURLConnection 的 didRecieveResponse 函数上获取数据。实际上,从比较我的代码在 iOS 平台之间的行为方式来看,我似乎没有从 didRecieveResponse 函数接收数据,因为有时预期的ContentLength 大多返回 -1,但这也发生在 iOS 6 中。在 iOS7 中,问题源于另一个来源这与此示例或影响我使用 NSOperation 的网络连接无关。所以我的观点是,问题可能不是您的平台差异,而是您运行功能的代码。我会再次检查你的代码是否有错误。

【讨论】:

以上是关于用于获取数据的 Web 服务在 ios 6 中返回 null 但在 ios 7 中不返回的主要内容,如果未能解决你的问题,请参考以下文章

在 ios 应用程序中使用活动目录用户验证 Web 服务?

如何 ios 连接 Web 服务并获取 json 数据?

浅谈iOS中的userAgent

iOS 将 json 数据发布到 Web 服务并返回结果

ios Web 服务登录返回空的 xml 响应

python中的Web服务,用于获取Big Query中表的架构信息