Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
GoogleMaps iOS SDK 1.5版无响应_Ios_Google Maps_Google Maps Api 3_Google Maps Markers_Google Maps Sdk Ios - Fatal编程技术网

GoogleMaps iOS SDK 1.5版无响应

GoogleMaps iOS SDK 1.5版无响应,ios,google-maps,google-maps-api-3,google-maps-markers,google-maps-sdk-ios,Ios,Google Maps,Google Maps Api 3,Google Maps Markers,Google Maps Sdk Ios,我正在我的应用程序中使用最新的GoogleMaps iOS SDK,在最新的iOS更新7.0.3之后,它在第一次触摸后开始变得无响应。让我进一步说明这一点。第一次触摸地图后,地图将变得无响应。一开始,你可以按住缩放、拖动、滑动和其他任何东西,但在第一次触摸之后,它就不起作用了。这是在苹果更新iOS后开始的。如果我使用iOS6模拟器,即使在第一次触摸之后,我也可以做所有的手势。我不知道这是因为iOS更新还是我的代码有问题。如果有人有任何建议或经历过类似的事情可以指导我,我将不胜感激。提前谢谢 按照

我正在我的应用程序中使用最新的GoogleMaps iOS SDK,在最新的iOS更新7.0.3之后,它在第一次触摸后开始变得无响应。让我进一步说明这一点。第一次触摸地图后,地图将变得无响应。一开始,你可以按住缩放、拖动、滑动和其他任何东西,但在第一次触摸之后,它就不起作用了。这是在苹果更新iOS后开始的。如果我使用iOS6模拟器,即使在第一次触摸之后,我也可以做所有的手势。我不知道这是因为iOS更新还是我的代码有问题。如果有人有任何建议或经历过类似的事情可以指导我,我将不胜感激。提前谢谢

按照此处的网站说明:()

它在iOS6上工作,以前也在iOS7上工作。 MapsViewController.m

#import "MapsViewController.h"
#import <GoogleMaps/GoogleMaps.h>
@interface MapsViewController ()
@end
@implementation MapsViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.storeNamesArray        = [[NSMutableArray alloc] init];
    self.storePricesArray       = [[NSMutableArray alloc] init];
    self.storeLatitudeArray     = [[NSMutableArray alloc] init];
    self.storeLongitudeArray    = [[NSMutableArray alloc] init];
    self.priceTypeArray         = [[NSMutableArray alloc] init];

    dispatch_async(dispatch_get_main_queue(), ^{ NSData *data = 
    [NSData dataWithContentsOfURL:[NSURL URLWithString:
    [NSString stringWithFormat: @"http://www.someurl.com/mobile-api"]]]; 
    [self performSelectorOnMainThread:@selector(fetchData:) withObject:data
    waitUntilDone:YES]; });
}

-(void)fetchData:(NSData *)responseData
{
    if (responseData)
    {
        NSError *error;
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
        NSDictionary *stores =[json objectForKey:@"stores"];
        for(NSDictionary *location in stores)
        {
            [self.storeNamesArray addObject:[location objectForKey:@"name"]];
            [self.storePricesArray addObject:[location objectForKey:@"price"]];
            [self.storeLatitudeArray addObject:[location objectForKey:@"latitude"]];
            [self.storeLongitudeArray addObject:[location objectForKey:@"longitude"]];
            [self.priceTypeArray addObject:[location objectForKey:@"price_type"]];
        }
    }
    double lat = 0.0;
    double lon = 0.0;
    GMSCameraPosition *camera;
    if(self.currentLocationArray.count !=0)
    {
        lat = [self.currentLocationArray[0] doubleValue];
        lon = [self.currentLocationArray[1] doubleValue];
        camera = [GMSCameraPosition cameraWithLatitude:lat longitude:lon zoom:12];
    }
    else
    {
        lat = [self.storeLatitudeArray[0] doubleValue];
        lon = [self.storeLongitudeArray[0] doubleValue];
        camera = [GMSCameraPosition cameraWithLatitude:lat longitude:lon zoom:9];
    }
    GMSMapView *mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
    for(int i=0; i<self.storeNamesArray.count; i++)
    {
        GMSMarker *marker = [[GMSMarker alloc] init];
        marker.title = self.storeNamesArray[i];
        marker.snippet = [NSString stringWithFormat:@"%@ $%@", self.priceTypeArray[i], self.storePricesArray[i]];
        marker.position = CLLocationCoordinate2DMake([self.storeLatitudeArray[i] doubleValue], [self.storeLongitudeArray[i] doubleValue]);
        marker.map = mapView;
    }
    if(self.currentLocationArray.count !=0)
    {
        GMSMarker *currentMarker = [[GMSMarker alloc] init];
        currentMarker.title = @"Current Location";
        currentMarker.snippet = @"You are here";
        currentMarker.position = CLLocationCoordinate2DMake(lat, lon);
        currentMarker.map = mapView;
        currentMarker.icon = [UIImage imageNamed:@"temp_userLocation"];
        mapView.selectedMarker = currentMarker;
    }
    CGRect newFrame = self.view.bounds;
    newFrame.size.height = frame.size.height / 2;
    mapView.frame = newFrame;
    mapView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleBottomMargin;
    mapView.delegate = self;
    [self.view addSubview:mapView];
}
#导入“MapsViewController.h”
#进口
@接口映射IEWController()
@结束
@MapsViewController的实现
-(无效)viewDidLoad
{
[超级视图下载];
self.storeNamesArray=[[NSMutableArray alloc]init];
self.storePricesArray=[[NSMutableArray alloc]init];
self.storelatitudarray=[[NSMutableArray alloc]init];
self.storelongituderray=[[NSMutableArray alloc]init];
self.priceTypeArray=[[NSMutableArray alloc]init];
dispatch_async(dispatch_get_main_queue(),^{NSData*data=
[NSData DATA WITHCONTENTSOFURL:[NSURL URLWithString:
[NSString stringWithFormat:@”http://www.someurl.com/mobile-api"]]]; 
[self-performSelectorOnMainThread:@selector(fetchData:)withObject:data
waitUntilDone:是];});
}
-(void)fetchData:(NSData*)responseData
{
如果(响应数据)
{
n错误*错误;
NSDictionary*json=[NSJSONSerialization JSONObject WithData:responseData选项:针织错误:&错误];
NSDictionary*stores=[json objectForKey:@“stores”];
用于(NSDictionary*商店中的位置)
{
[self.storeNamesArray addObject:[location objectForKey:@“name”];
[self.storePricesArray addObject:[location objectForKey:@“price”];
[self.storelatitudarray addObject:[location objectForKey:@“latitude”];
[self.storelongitudarray addObject:[位置对象forkey:@“经度”];
[self.priceTypeArray addObject:[location objectForKey:@“price_type”];
}
}
双lat=0.0;
双lon=0.0;
GMSCAMERAPOSION*摄像机;
if(self.currentLocationArray.count!=0)
{
lat=[self.currentLocationArray[0]doubleValue];
lon=[self.currentLocationArray[1]doubleValue];
摄像机=[GMSCameraPosition摄像机,纬度:纬度经度:经度变焦:12];
}
其他的
{
lat=[self.storeLatitudeArray[0]doubleValue];
lon=[self.storeLongitudArray[0]doubleValue];
摄像机=[GMSCameraPosition摄像机,纬度:纬度经度:经度变焦:9];
}
GMSMapView*mapView=[GMSMapView mapWithFrame:CGRectZero摄影机:摄影机];

对于(int i=0;i在viewDidLoad方法中插入此代码

-(无效)viewDidLoad {


}

我不知道这里是否是这种情况,但我对URLWithString函数也有同样的问题,该函数仅出现在iOS 7.0.3上,我假设苹果已经更改了该函数可以使用的字符,因此如果它返回nil,这是您的解决方案

我所做的是使用此函数创建字符串,然后再将其与URLWithString一起使用:

-(NSString *) URLEncodeString:(NSString *) str // New to fix 7.0.3 issue //
{

    NSMutableString *tempStr = [NSMutableString stringWithString:str];
    [tempStr replaceOccurrencesOfString:@" " withString:@"+" options:NSCaseInsensitiveSearch range:NSMakeRange(0, [tempStr length])];


    return [[NSString stringWithFormat:@"%@",tempStr] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
}
在您的情况下,只需将行更改为此行:

dispatch_async(dispatch_get_main_queue(), ^{ NSData *data = 
[NSData dataWithContentsOfURL:[NSURL URLWithString:[self URLEncodeString: [NSString stringWithFormat: @"http://www.someurl.com/mobile-api"]]]]; 
[self performSelectorOnMainThread:@selector(fetchData:) withObject:data
waitUntilDone:YES]; });

希望这也能对你有所帮助。

我已经在网站上发布了我的克里斯代码的修改版本

解决方案涉及对Chris代码的两项更改:

  • 将Google地图实例化迁移到
    viewDidLoad
  • 将网络流量从主(UI)线程推送到后台线程

  • 你能不能把这当作我们的错误提出来?事实上,更好的问题。你为什么在主线程上进行网络访问,尽管是异步的?让网络访问本身在后台线程上不是更好,这样就不会阻塞主UI吗?@Brett完成了,我该怎么做?为什么?我发现dispatch\u asynch调用在线,并且一直在我们之间我的理解是,您的dispatch\u async调用实际上是将您的网络请求分派到主UI线程,因为您请求的队列是dispatch\u get\u main\u queue()-UI线程。请尝试将dispatch\u get\u main\u queue()替换为dispatch\u get\u global\u队列(dispatch\u queue\u PRIORITY\u DEFAULT,0)看看它是否仍然没有反应。嘿,克里斯,你能帮我收集一个完整的样本,这样我就可以确认问题了吗?如果我能复制,我可以分配给eng来修复它。对不起,那不起作用。我希望这样做,因为我似乎找不到答案。对不起,你能澄清一下吗?我应该更改哪一行,我应该替换哪一行ith?@Chris在将URL字符串发送到URLWithString之前,请通过我添加的函数传递它。只需用我的代码替换调度行。谢谢!问题似乎不是谷歌地图,而是我的应用程序的结构。我有一个初始导航控制器,它将TabBarViewController推到堆栈上。我想我的问题在于。我还没有弄明白,但如果我弄明白了什么,我会发帖的。
    dispatch_async(dispatch_get_main_queue(), ^{ NSData *data = 
    [NSData dataWithContentsOfURL:[NSURL URLWithString:[self URLEncodeString: [NSString stringWithFormat: @"http://www.someurl.com/mobile-api"]]]]; 
    [self performSelectorOnMainThread:@selector(fetchData:) withObject:data
    waitUntilDone:YES]; });