2013-02-10 33 views
0

这里是我的解析代码:在解析iOS中的JSON时出现了一些错误?

- (void)connectionDidFinishLoading:(NSURLConnection *)connection{ 
NSError *myError = nil; 
NSDictionary *flighttrackjson = [NSJSONSerialization JSONObjectWithData:jsonresponse options:NSJSONReadingMutableLeaves error:&myError]; 
NSArray *FlightStatus = [flighttrackjson objectForKey:@"flightStatuses"]; 
NSString *FlightID = [FlightStatus valueForKey:@"flightId"]; 
NSString *DepartACode = [FlightStatus valueForKey:@"departureAirportFsCode"]; 
NSString *ArivalACode = [FlightStatus valueForKey:@"arrivalAirportFsCode"]; 
NSArray *DepartATime = [FlightStatus valueForKey:@"departureDate"]; 
NSArray *AriveATime = [FlightStatus valueForKey:@"arrivalDate"]; 
NSString *DepartTimeString = [DepartATime valueForKey:@"dateLocal"]; 
NSString *ArriveTimeString = [AriveATime valueForKey:@"dateUtc"]; 
NSArray *Delays = [FlightStatus valueForKey:@"delays"]; 
NSString *DepartDelayMinutes = [Delays valueForKey:@"departureGateDelayMinutes"]; 
NSString *ArriveDelayMinutes = [Delays valueForKey:@"arrivalGateDelayMinutes"]; 
NSArray *AirportInfo = [FlightStatus valueForKey:@"airportResources"]; 
NSString *DepartTerminal = [AirportInfo valueForKey:@"departureTerminal"]; 
NSString *DepartAGate = [AirportInfo valueForKey:@"departureGate"]; 
NSString *ArriveTerminal = [AirportInfo valueForKey:@"arrivalTerminal"]; 
NSString *ArriveAGate = [AirportInfo valueForKey:@"arrivalGate"]; 
NSString *BaggageClaim = [AirportInfo valueForKey:@"baggage"]; 
flightID.text=FlightID; 
DepartCode.text=DepartACode; 
ArrivalCode.text=ArivalACode; 
DepartTime.text=DepartTimeString; 
ArriveTime.text=ArriveTimeString; 
DepartDelay.text=DepartDelayMinutes; 
ArriveDelay.text=ArriveDelayMinutes; 
DepartTerm.text=DepartTerminal; 
DepartGate.text=DepartAGate; 
ArriveTerm.text=ArriveTerminal; 
ArriveGate.text=ArriveAGate; 
Baggage.text=BaggageClaim; 
} 

当我运行的,它给了我这样的:

2013年2月9日21:51:40.262的地方[7083:C07] - [__ NSArrayI isEqualToString: ]:无法识别的选择器发送到实例0x8262b50 2013-02-09 21:51:40.263位置[7083:c07] *终止应用程序由于未捕获的异常'NSInvalidArgumentException',原因:' - [__ NSArrayI isEqualToString:]:无法识别的选择器发送到实例0x8262b50'

和hi ghlights this:

return UIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegate class]));

我的代码看起来很糟糕,或者至少有人能够解释这个错误可能意味着什么吗?

这是我正在与之合作。 http://pastebin.com/vv8ScBfZ

对不起,我对这一切都很陌生。

感谢您的任何提示!

+1

你应该告诉我们您的JSON的摘录让我们帮您诊断此。但是上面的内容没有意义,因为你告诉我们'FlightStatus'是一个'NSArray',但是你试图用'valueForKey'从这个数组中检索单个'NSString'值。如果'FlightStatus'是一个字典数组,那么'valueForKey'将返回一个值数组,而不是单个'NSString'。而你的错误信息似乎证实了这一点,因为它告诉你,你在某个时候检索了一个'NSArray',并且你正在尝试将它用作'NSString'。 – Rob 2013-02-10 03:03:02

+0

从错误中猜测,我在想你可能会错误地排列关于JSON结构的一些细节。你说这是一本字典,其中的项目是数组......但这是否准确?还是它是一个项目的数组,每一个像字典? – 2013-02-10 03:03:56

+0

以下是我正在与之合作的方式,谢谢! http://pastebin.com/vv8ScBfZ – 2013-02-10 03:09:57

回答

2

它看起来像FlightStatus是一个具有一个对象的数组(有一串键的字典)。由于它是一个数组,因此必须首先获取该对象,然后才能在其包含的字典上使用valueForKey:。要解决这个问题最简单的方法是可以改变:

NSArray *FlightStatus = [flighttrackjson objectForKey:@"flightStatuses"]; 

这样:

NSDictionary *FlightStatus = [[flighttrackjson objectForKey:@"flightStatuses"] lastObject]; 
+0

现在它说:2013-02-10 14:21:33.231 Places [8521:c07] ***由于未捕获异常'NSInvalidArgumentException',终止应用程序,原因:' - [__ NSCFNumber isEqualToString :]:无法识别的选择器发送到实例0x8230650' ***第一次抛出调用堆栈: – 2013-02-10 19:22:19

+0

@JonSullivan,这可能是因为你分配给一个字符串的值之一是一个数字。你必须查看你的JSON并查看哪一个。 – rdelmar 2013-02-10 19:38:49

+0

好的,谢谢你,谢谢! – 2013-02-10 19:46:43