是否有任何良好的教程/源代码来解析jSon数据到cocos2d项目?我知道如何解析jSon(也是XML)到xcode中并显示到tableview中,但我需要为我的cocos2d项目执行此操作。 这是我要怎样做:cocos2d json解析iphone应用程序
#import "Eighties.h"
#import "HelloWorldLayer.h"
#import "GameScene.h"
#import "JSON.h"
#define kLatestKivaLoansURL @"http://api.kivaws.org/v1/loans/search.json?status=fundraising"
@implementation Eighties
@synthesize responseData;
+(CCScene *) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
// 'layer' is an autorelease object.
Eighties *layer = [Eighties node];
// add layer as a child to scene
[scene addChild: layer];
// return the scene
return scene;
}
-(id) init
{
// always call "super" init
// Apple recommends to re-assign "self" with the "super's" return value
if((self=[super init])) {
CGSize winSize = [[CCDirector sharedDirector] winSize];
CCSprite *bg = [CCSprite spriteWithFile:@"bg.jpg"];
[bg setPosition:ccp(winSize.width/2, winSize.height/2)];
[self addChild:bg z:0];
/*
CCMenuItem *menuItems = [CCMenuItemImage itemWithNormalImage:@"back_pink.png" selectedImage:@"back_blue.png" block:^(id sender) {
NSLog(@"Pressed");
[[SimpleAudioEngine sharedEngine] playEffect:@"tongue-clap.wav"];
[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[GameScene scene] withColor:ccWHITE]];
}];
*/
CCMenuItem *menuItems2 = [CCMenuItemImage itemWithNormalImage:@"back_pink.png" selectedImage:@"back_blue.png" target:self selector:@selector(loadData)];
menuItems2.position = ccp(winSize.width/2-50, winSize.height/2-50);
CCMenu *menu = [CCMenu menuWithItems:menuItems2, nil];
menu.position = ccp(winSize.width/2, winSize.height/2);
[self addChild:menu];
}
return self;
}
-(void)test {
NSLog(@"Success");
UIAlertView *message = [[UIAlertView alloc] initWithTitle:@"Success"
message:@"Test Method Called"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
}
-(void)loadData
{
self.responseData = [NSMutableData data];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:kLatestKivaLoansURL]];
[[NSURLConnection alloc] initWithRequest:request delegate:self];
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[responseData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[responseData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
[connection release];
self.responseData = nil;
}
#pragma mark -
#pragma mark Process loan data
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[connection release];
NSString *responseString = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
self.responseData = nil;
NSArray* latestLoans = [(NSDictionary*)[responseString JSONValue] objectForKey:@"loans"];
[responseString release];
//choose a random loan
for (int i=0; i<=18; i++) {
NSDictionary* loan = [latestLoans objectAtIndex:i];
//fetch the data
NSNumber* fundedAmount = [loan objectForKey:@"funded_amount"];
NSNumber* loanAmount = [loan objectForKey:@"loan_amount"];
//float outstandingAmount = [loanAmount floatValue] - [fundedAmount floatValue];
//NSString* name = [loan objectForKey:@"name"];
//NSString* country = [(NSDictionary*)[loan objectForKey:@"location"] objectForKey:@"country"];
//set the text to the label
/*
label.text = [NSString stringWithFormat:@"Latest loan: %@ from %@ needs another $%.2f, please help",
name,country,outstandingAmount
];
*/
NSLog(@"%d",i);
//NSLog(@"%@",label.text);
NSLog(@"\n");
/*
UIAlertView *message = [[UIAlertView alloc] initWithTitle:name
message:country
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[message show];
*/
}
}
@end
抱歉,我不能格式化我这里贴的代码......它可能是难以阅读。我的问题是,我如何解析并显示来自远程URL的jSon数据到“Cocos2d”项目中。我有一个类是cocos2d中的“CCLayer”的子类,而不是UIViewController的子类。我知道解析jSon for UIViewController的子类,但我无法为CCLayer的子类做到这一点。你知道关于这个的任何教程吗? – jeewan
为什么你不能为CCLayer的子类做同样的事情?更多信息将有所帮助:) –
我修复了这些问题。问题是:我使用的JSON解析器中有一些错误。我尝试从这里的最新版本:https://github.com/stig/json-framework/downloads,它工作正常。我发布的代码只是包含最新的JSON .h文件。 – jeewan