在 iOS 应用程序中返回 JSON

Posted

技术标签:

【中文标题】在 iOS 应用程序中返回 JSON【英文标题】:Return JSON in iOS application 【发布时间】:2015-01-25 19:49:20 【问题描述】:

我正在尝试通过 php 文件在我的 ios 应用程序中返回一个简单的 JSON。

PHP:

<?php
header('Content-Type: application/json');
$myarray = array("io" => 1, "tu" => 2);
$out = json_encode($myarray);

echo $out;

?>

iOS:

-(void)provePHP

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:@"http://mysite/myphpfile.php"]];
    [request setValue:@"application/json" forHTTPHeaderField:@"Accept"];
    [request setValue:@"application/json"forHTTPHeaderField:@"Content-Type"];

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


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

    NSError *error;

    NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &error];

    NSLog(@"%@ - %@", jsonDict, error);




- (void)connectionDidFinishLoading:(NSURLConnection *)connection 

    NSLog(@"FINISH");


- (void)connection:(NSURLConnection *)connection
  didFailWithError:(NSError *)error

    NSLog(@"Error");

我不明白我做错了什么。我遵循了很多我在这个网站上找到的代码,但在日志中没有结果。

【问题讨论】:

看看thispost/answer 【参考方案1】:

connection:didReceiveData: 可以在一个连接中多次调用。您应该有一个 NSMutableData 属性,您可以一直将数据附加到 connection:didReceiveData: 中,然后在 connectionDidFinishLoading 中的所有数据后使用该数据。

我建议您调整您的代码以遵循这些准则并查看您是否仍有问题。


编辑 如果您根本没有收到日志,则说明您没有正确地将您的课程设置为NSURLConnectionDelegate。有关委托模式是什么以及如何使您的类成为 Objective-C 中框架类的委托的信息,请参阅 the docs。

【讨论】:

我有一些日志,但 jsonDict 为空。我尝试使用 appendData 但我崩溃了,因为我在委托方法中收到的数据为空......

以上是关于在 iOS 应用程序中返回 JSON的主要内容,如果未能解决你的问题,请参考以下文章

json不在iOS应用程序中解码

json_decode 从 iOS 应用程序返回空值

在 iOS、PHP 和 JSON 中使用来自 SQL Server 的空值

最佳实践以及如何在 Symfony2 中找到从 iOS AFNetworking 获取 POST 数据并在 GET 中返回 JSON?

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

为 iOS 应用返回带有丰富标记的文本