0

我正在解析 url,并遵循以下过程:-

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ 在welcomemapViewController.h中 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~

#import <UIKit/UIKit.h>

@interface welcomemapViewController : UIViewController
@property (strong, nonatomic) UITextField *txt;
@property (strong, nonatomic) NSString *typedtext;
@end

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~

欢迎地图ViewController.m

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~

#import "welcomemapViewController.h"
#import <GoogleMaps/GoogleMaps.h>
#define kGOOGLE_API_KEY @"AIzaSyCGeIN7gCxU8baq3e5eL0DU3_JHeWyKzic"
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
#define kLatestSearchURL [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/textsearch/xml?query=chandigarh&sensor=true&key=kGOOGLE_API_KEY"]



@interface welcomemapViewController ()
+(NSDictionary*)dictionaryWithContentsOfJSONURLString:(NSString*)urlAddress;
-(NSData*)toJSON;
@end
 @implementation NSDictionary(JSONCategories)

+(NSDictionary*)dictionaryWithContentsOfJSONURLString:(NSString*)urlAddress
{
    NSData* data = [NSData dataWithContentsOfURL: [NSURL URLWithString: urlAddress] ];
    __autoreleasing NSError* error = nil;
    id result = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error];
    if (error != nil) return nil;
    return result;
 }
-(NSData*)toJSON
 {
    NSError* error = nil;
    id result = [NSJSONSerialization dataWithJSONObject:self options:kNilOptions error:&error];
    if (error != nil) return nil;
     return result;
}
@end

@implementation welcomemapViewController{
    GMSMapView *gmap;
}
@synthesize txt,typedtext;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
 }

 - (void)viewDidLoad
 {
     [super viewDidLoad];

     GMSCameraPosition *cam = [GMSCameraPosition cameraWithLatitude:30.7343000 longitude:76.7933000 zoom:12];
     gmap = [GMSMapView mapWithFrame:CGRectMake(0, 60, 320, 480) camera:cam];
     [self.view addSubview:gmap];

     GMSMarker *marker = [[GMSMarker alloc] init];
     marker.position = CLLocationCoordinate2DMake(30.751288, 76.780899);
     marker.title = @"Sector -16";
     marker.snippet = @"Chandigarh";
     marker.map = gmap;

     UIButton *button    = [UIButton buttonWithType:UIButtonTypeRoundedRect];
     button.frame        = CGRectMake(200, 65, 100, 40);
     [button setTitle:@"TITLE" forState:UIControlStateNormal];
     [button addTarget:self action:@selector(search:) forControlEvents:UIControlEventTouchUpInside];
     [self.view addSubview:button];

     CGRect frame2 = CGRectMake(10, 68, 200, 30);
     txt =[[UITextField alloc]initWithFrame:frame2];
     txt.placeholder = @"Search";
     txt.userInteractionEnabled = YES;
     txt.keyboardType = UIKeyboardTypeAlphabet;
     [txt setBorderStyle:UITextBorderStyleRoundedRect];

    [self.view addSubview:txt];

// Do any additional setup after loading the view from its nib.
}
-(IBAction)search:(id)sender
{
    dispatch_async(kBgQueue, ^{
    NSData* data = [NSData dataWithContentsOfURL: kLatestSearchURL];
    NSString *data1 = [NSString stringWithUTF8String:[data bytes]];
    NSLog(@"Response data: %@", data1);
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:data //1
                                                         options:kNilOptions
                                                           error:&error];
    NSLog(@"JSON Values: %@", json);

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

@end

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我的数组返回空值。

谁能告诉我我哪里错了??

4

1 回答 1

1

似乎您的响应数据可能返回 null。

您可以尝试在 fetchedData 方法中打印响应数据以查看返回的 API 吗?

- (void)fetchedData:(NSData *)responseData {
    // Print response.
    NSString *data = [NSString stringWithUTF8String:[responseData bytes]];
    NSLog(@"Response data: %@", data);

    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
    NSArray* latestLoans = [json objectForKey:@"loans"];

    NSLog(@"loans: %@", latestLoans);
}

编辑 - 您的搜索方法正在尝试序列化 Json 对象,但响应以 xml 格式返回。因此,kLatestSearchURL 应该更新为 -

#define kLatestSearchURL [NSURL URLWithString:@"https://maps.googleapis.com/maps/api/place/textsearch/json?query=chandigarh&sensor=true&key=kGOOGLE_API_KEY"]
于 2013-10-22T07:59:38.233 回答