NSJSONSerialization メソッド JSONObjectWithData:options:error: を使用しないのはなぜですか。私にとってはうまくいきました。
NSString *url = @"http://qdreams.com/laura/index.php?request=EventWeekListings&year=2012&month=10&day=22";
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:url]];
NSArray *arr = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSLog(@"%@",arr);
編集後: 今朝もう一度コードを実行したところ、あなたと同じように null になりました。dataWithContentsOfURL の問題。つまり、何かがうまくいかなかった場合に何が起こったのかを制御できず、知る方法がないということです。そこで、以下のコードで再テストしました。
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
[self loadData];
}
-(void) loadData {
NSLog(@"loadData...");
self.receivedData = [[NSMutableData alloc] init];
NSURL *url = [NSURL URLWithString:@"http://qdreams.com/laura/index.php?request=EventWeekListings&year=2012&month=10&day=22"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL: url cachePolicy: NSURLRequestUseProtocolCachePolicy timeoutInterval: 10.0];
[NSURLConnection connectionWithRequest:request delegate:self];
}
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
NSLog(@"didReceiveResponse...");
[self.receivedData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
NSLog(@"didReceiveData...");
NSLog(@"Succeeded! Received %ld bytes of data",[data length]);
[self.receivedData appendData:data];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"didFailWithError...");
NSLog(@"Connection failed! Error - %@ %@",[error localizedDescription],[[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
//lblError.text = [NSString stringWithFormat:@"Connection failed! Error - %@",[error localizedDescription]];
self.receivedData = nil;
}
-(void) connectionDidFinishLoading:(NSURLConnection *)connection {
NSLog(@"connectionDidFinishLoading...");
NSError *error = nil;
id result = [NSJSONSerialization JSONObjectWithData:self.receivedData options:kNilOptions error:&error];
if (error) {
NSLog(@"%@",error.localizedDescription);
NSLog(@"%@",[[NSString alloc] initWithData:self.receivedData encoding:NSUTF8StringEncoding]);
}else{
NSLog(@"Finished...Download/Parsing successful");
if ([result isKindOfClass:[NSArray class]])
NSLog(@"%@",result);
}
}
エラーが発生し、error.localizesDescription のログに「データが壊れているため読み取れませんでした」とありました。そのため、JSON パーサーが正しく機能するのを妨げる、サーバーから返されたものに何か問題があるようです。エラーメッセージとともに文字列も出力しました。データを注意深く見て、データの何が問題なのかを突き止めることができるかもしれません。