1

任何人都可以为我指出一个好的教程的正确方向或可能回答这个问题。

我有一些 JSON 要在我的网络服务器上返回

{
first_name: "Joe";
last_name: "Smith";
department: "Human Resources";
}

如何发出 http 请求以通过单击按钮获取此信息并在 iphone 上显示为文本。?

完整的新手,所以请“哑巴”下来。

4

2 回答 2

2

创建一个 jsonviewcontroller 类

#import <UIKit/UIKit.h>

@interface JSONViewController : UIViewController<UITableViewDelegate,UITableViewDataSource,NSURLConnectionDataDelegate>
{
    NSString *label;
}
@property (weak, nonatomic) IBOutlet UITableView *myTableView;
- (IBAction)getTop10AlbumAction:(id)sender;


@end

然后在实现类中:-

#import "JSONViewController.h"

@interface JSONViewController ()
{
    NSMutableData *webData;
    NSURLConnection *connection;
    NSMutableArray *array;
    NSString *category;    
}

@end

@implementation JSONViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    array=[[NSMutableArray alloc]init];
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    [webData setLength:0];
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [webData appendData:data];
}

-(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
    NSLog(@"Failed with Error");
}

这是实际解析发生的地方,我们从相应的字典和数组中获取专辑的标题。要了解这一点,请首先访问此链接http://jsonviewer.stack.hu/#http://itunes.apple.com/us/rss/topalbums/limit=10/json这是显示结构的 json 查看器我们要访问的内容。不要恐慌!如果你尝试解析一些 json url,它真的很容易

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSDictionary *allDataDictionary=[NSJSONSerialization JSONObjectWithData:webData options:0 error:nil];
    NSDictionary *feed=[allDataDictionary objectForKey:@"feed"];
    NSArray *arrayOfEntry=[feed objectForKey:@"entry"];
    for (NSDictionary *dict in arrayOfEntry) {
        NSDictionary *title=[dict objectForKey:@"title"];
        NSString *label=[title objectForKey:@"label"];
        [array addObject:label];
    }

[[self myTableView]reloadData];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return[array count];
}

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier=@"cell";
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell) {
        cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    }

    //clear background color
    [[cell textLabel] setBackgroundColor:[UIColor clearColor]];
    [[cell detailTextLabel] setBackgroundColor:[UIColor clearColor]];

    //set cell text
    cell.textLabel.text=[array objectAtIndex:indexPath.row];

    //set cell accessory type
    cell.accessoryType=UITableViewCellAccessoryDisclosureIndicator;
    return cell;
}

在这里,我们指定我们将要解析并发出连接请求的 iTunes url

- (IBAction)getTop10AlbumAction:(id)sender {
    NSURL *url=[NSURL URLWithString:@"http://itunes.apple.com/us/rss/topalbums/limit=10/json"];    
    NSURLRequest *request=[NSURLRequest requestWithURL:url];
    connection=[NSURLConnection connectionWithRequest:request delegate:self];
    if (connection) {
        webData=[[NSMutableData alloc]init];
    }
    [[self myTableView]reloadData];
}
@end

我希望我已经说得够清楚了!

于 2013-04-12T13:10:01.057 回答
1

我建议你两个不同的教程:

  1. 创建一个简单的界面。这是一个来自 Apple 的示例,其中显示了一个按钮和一个文本:iOS 按钮 - 标签示例

  2. changeGreeting:将调用 Web 服务的代码插入到控制器代码中(即): iOS JSON Webservice 教程

于 2013-05-31T06:08:11.610 回答