だから私はiOS開発に非常に慣れていないので、サーバーに接続して情報を取得する最初のアプリを作成しています。私はいくつかの異なるチュートリアルに従い、さまざまな場所からいくつかのjsonを引き出すことができました。私が抱えている問題は、プルする必要がある情報にルート要素がないことです。アプリに情報を取得するには何を変更する必要がありますか?
以下は私が使用しているコードです:
#import "leagueTableViewController.h"
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define kjsonURL [NSURL URLWithString: @"http://api.kivaws.org/v1/loans/search.json?status=fundraising"]
@interface leagueTableViewController ()
@end
@implementation leagueTableViewController{
NSMutableArray *jsonResults;
}
- (id)initWithStyle:(UITableViewStyle)style
{
self = [super initWithStyle:style];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
dispatch_async(kBgQueue, ^{
NSData* data = [NSData dataWithContentsOfURL:
kjsonURL];
[self performSelectorOnMainThread:@selector(fetchedData:)
withObject:data waitUntilDone:YES];
});
}
- (void)fetchedData:(NSData *)responseData {
NSError* error;
NSDictionary* json = [NSJSONSerialization
JSONObjectWithData:responseData
options:kNilOptions
error:&error];
jsonResults = [json objectForKey:@"loans"];
[self.tableView reloadData];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
// Return the number of sections.
return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection: (NSInteger)section
{
return [jsonResults count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSDictionary *appsdict = [jsonResults objectAtIndex:indexPath.row];
NSString *VersionString = [appsdict objectForKey:@"funded_amount"];
NSString *priceString = [appsdict objectForKey:@"loan_amount"];
cell.textLabel.text = [appsdict objectForKey:@"name"];
cell.detailTextLabel.text = [NSString stringWithFormat:@"Version: %@ Price: $ %@ USD",VersionString,priceString];
return cell;
}
#pragma mark - Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
// NSDictionary *appsdict = [jsonResults objectAtIndex:indexPath.row];
//
// NSString *appURL = [appsdict objectForKey:@"trackViewUrl"];
//
// [[UIApplication sharedApplication] openURL:[NSURL URLWithString:appURL]];
}
@end
これは、ルート要素を見ることができるように、上記のコードが使用している json の例です。
{
"paging": {
"page": 1,
"total": 873,
"page_size": 20,
"pages": 44
},
"loans": [{
"id": 544449,
"name": "Sajad",
"description": {
"languages": ["en"]
},
"status": "fundraising",
"funded_amount": 0,
"basket_amount": 0,
"image": {
"id": 1325179,
"template_id": 1
},
"activity": "Cloth & Dressmaking Supplies",
"sector": "Retail",
"use": "to renovate his shop and increase his textile inventory",
"location": {
"country_code": "IQ",
"country": "Iraq",
"geo": {
"level": "country",
"pairs": "33 44",
"type": "point"
}
},
"partner_id": 166,
"posted_date": "2013-04-04T15:40:01Z",
"planned_expiration_date": "2013-05-04T15:40:01Z",
"loan_amount": 2400,
"borrower_count": 1
}
これは取得する必要があるjsonですが、ルート要素がありません。これをアプリに表示するにはどうすればよいですか:
[{
"position": 1,
"team_id": 10260,
"team": "Manchester United",
"teamshort": "Man Utd",
"played": 30,
"won": 25,
"drawn": 2,
"lost": 3,
"for": 70,
"against": 31,
"difference": 39,
"home": {
"played": 15,
"won": 14,
"drawn": 0,
"lost": 1,
"for": 39,
"against": 15,
"difference": 24
},
"away": {
"played": 15,
"won": 11,
"drawn": 2,
"lost": 2,
"for": 31,
"against": 16,
"difference": 15
},
"points": 77,
"info": "championsleague"
}