有没有其他人,他们在iOS 6应用程序中使用地图,注意到极高的内存使用,一直到接收内存警告到崩溃的应用程序?
我通过仪器运行应用程序,我没有看到任何泄漏,直到创建地图视图,应用程序始终以大约3mb Live Bytes运行.创建地图并下载切片后,Live Bytes会跳至~13mb Live Bytes.然后,当我移动地图并放大和缩小Live Bytes连续体时,直到应用程序崩溃在大约40mb Live Bytes.顺便提一下,这是在iPhone 4上.在iPod touch上它甚至更早崩溃.
我正在重复使用注释视图,没有任何泄漏.是否有其他人在使用新的iOS 6地图时看到了相同的高内存使用量?还有,有没有人有解决方案?
对于iOS 6上的中国地图,MapKit似乎根据设备所在的位置选择地图提供者.如果你在中国,它将使用AutoNavi地图,否则它将使用默认的Apple地图.更复杂的是,AutoNavi地图的转换方式与谷歌iOS 5上的地图相同,而默认的Apple地图并未转换.
通过改造我正在谈论中国所有地图都被改造的事实,尽管事实并非如此.相反,中国的一些地图会被改造,而有些地图却没有.
此变换使得难以在地图上正确放置注释,因为地图通常偏移约500米.由于无法反转实际地图的变换,因此解决方案是将相同的偏移应用于注释.
至少对于有限的区域,存在逆转变换的非平凡方式.iOS 6中的问题是知道地图是否被转换为能够适当地补偿注释.在iOS 5上,由于一致地使用了转换后的地图,因此该问题不存在.
下面的上海地图说明了情况(未演示实际的变换偏移).

那么,在运行时是否有任何方法可以了解是否使用了转换或未转换的中国地图?处理这个的其他想法?
编辑:通过中国代理路由网络流量在模拟器中更改地图外观,因此地图提供商的选择必须基于IP.
我在苹果商店有一个应用程序,在iOS6更新后,我收到了数百份崩溃报告MKMapView.我无法在我的设备上重现崩溃.这看起来像是一个问题EAGLContext.我们不在我们的应用程序中使用OpenGL,但是我们MKMapView在不同的控制器中有多个实例.我发现一个类似的问题,iOS 6应用程序在显示地图时在EAGLContext中崩溃但他们使用OpenGL.
这里有回溯:
Exception Type: SIGSEGV
Exception Codes: SEGV_ACCERR at 0x1
Crashed Thread: 0
Thread 0 Crashed:
0 libGPUSupportMercury.dylib 0x00000e22 gpus_ReturnNotPermittedKillClient + 10
1 libGPUSupportMercury.dylib 0x3bccc5fb gldCreateContext + 190
2 GLEngine 0x344c2b15 gliCreateContextWithShared + 676
3 OpenGLES 0x0000491d -[EAGLContext initWithAPI:properties:] + 1433
4 OpenGLES 0x000042d7 -[EAGLContext initWithAPI:sharedWithCompute:] + 143
5 VectorKit 0x00011c81 -[VGLGPU init] + 105
6 VectorKit 0x000d4659 __24+[VGLGPU sharedInstance]_block_invoke_0 + 49
7 libdispatch.dylib 0x000014b7 _dispatch_client_callout + 23
8 libdispatch.dylib 0x000073f7 …Run Code Online (Sandbox Code Playgroud) 此代码设置以指定位置为中心的默认缩放级别viewDidLoad.该代码在以前版本的iOS中运行良好:
CLLocationDistance visibleDistance = 100000; // 100 kilometers
MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(location, visibleDistance, visibleDistance);
MKCoordinateRegion adjustedRegion = [mapView regionThatFits:region];
.
.
.
[mapView setRegion:adjustedRegion animated:NO];
Run Code Online (Sandbox Code Playgroud)
但是,在iOS6中,对于纬度高于~75(> 75.1)的位置,应用程序崩溃并显示以下消息:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'Invalid Region <center:nan, nan span:nan, nan>'
Run Code Online (Sandbox Code Playgroud)
我发现对于给定的缩放级别mapView无法在MKCoordinateRegion内部设置正确.[mapView regionThatFits:region]将所有值返回为nan.如果我region直接使用变量,它只显示默认地图(整个世界).
经过一些测试后,我发现通过调整visibleDistance我可以让代码正常工作.魔法距离似乎略高于20公里(对于一系列纬度和纬度的Delta值,大约在22到23公里之间).这只发生在北纬地区(-80工作正常).
初始定位后,地图可在任何位置工作.看起来Apple改变了可见地图区域的初始化方式.我正在为受影响的区域使用更高的缩放级别作为解决方法.有没有其他方法可以使它正常工作?
在iOS 6上重新使用此Google地图支持.
这是一个严肃而富有建设性的问题,必须针对许多已经在iOS 5上发布其应用并且符合Google服务条款法律合规性的应用开发者来解决这个问题http://code.google.com/apis/maps/ iphone/terms.html.
事实如下:使用Google Maps API Web Services的应用程序必须与Google Map上的信息显示相关.禁止在不显示Google地图的应用程序中使用该服务.
假设某些开发人员在App Store上有可下载的应用程序,用户已经下载并正在使用它.当用户使用iOS 6更新手机时,Apple地图将代替Google地图显示,突然违反了Google的许可条款.
从Google许可证的角度来看,该应用程序变得"事实上",成千上万的用户将使用已成为非法的应用程序,我无法想出一种技术方法来阻止这种情况.
我们该怎么处理这个?
欢迎任何建设性的想法?
PS.我也将这些问题发布给Google和Apple.
我想我可能已经在iOS4的mapkit API中发现了一个错误,但由于我仍然认为自己是一个新手,我想我会在这里查看是否有人可以指出我可能做错了什么.
我有一个应用程序,我已经工作了几个星期,在其中使用mapview并利用MKUserTrackingButton来切换跟踪模式.在iOS 5上它工作正常但是从升级到6它有奇怪的行为.当你将mapview放入跟踪带有标题的用户之后的跟踪模式时,如果你相对静止,它会很好,但是当你开始在汽车中移动时,每次回到常规跟踪模式时它会以航向模式退出轨道.经过许多令人沮丧的时间试图找出它后,我决定使用最小的mapview制作一个新的简单应用程序并跟踪,看看它是否只是我的编码或可能的错误.新的应用程序做同样的事情.我发布了以下所有代码.希望有人可以帮我告诉我,如果我做错了.
这是app delegate标题
// iTrackerAppDelegate.h
// iTracker
//
// Created by Victor Hudson on 9/22/12.
// Copyright (c) 2012 Victor Hudson. All rights reserved.
//
#import <UIKit/UIKit.h>
#import "TrackerViewController.h"
@interface iTrackerAppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) IBOutlet UIWindow *window;
@end
Run Code Online (Sandbox Code Playgroud)
这是app委托实现
//
// iTrackerAppDelegate.m
// iTracker
//
// Created by Victor Hudson on 9/22/12.
// Copyright (c) 2012 Victor Hudson. All rights reserved.
//
#import "iTrackerAppDelegate.h"
@implementation iTrackerAppDelegate
@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary …Run Code Online (Sandbox Code Playgroud) 几乎所有主要新闻媒体都报道苹果将停止在iOS6中使用谷歌地图服务.我认为没有人真正知道这些变化究竟是什么,什么时候推出,苹果将如何实施它们以及Google或Apple是否会开始为其服务收费.由于存在这些不确定因素,我无法就是否应该发布一个我已经工作了一年多的新公共汽车追踪器应用程序做出明智的决定.我已经设定了2012年6月15日的最初硬截止日期.我知道最好的办法是等待,看看将会发生什么变化以及Apple将如何实施这些变化.但我有点不耐烦并且强调要推迟发布日期,因为任何进一步的延迟都会以非常重要的方式影响我的许多其他计划.
有关该应用的更多信息:
它根据从第三方运输机构的API获得的信息提供实时公共交通信息.它在很大程度上取决于iOS MapKit框架和iOS位置服务,以实时显示给定路径上的总线的当前地理位置,并在两个位置之间提供传输信息.据Apple称,iOS MapKit框架使用Google服务提供地图数据.某些功能会调用Google地图应用以提供到最近站点的中转计划和转弯路线指示.
我的问题:
如果谣言成真,你认为Apple肯定会实施任何改变而不会影响已经使用当前MapKit框架的应用程序吗?我应该准备什么样的潜在问题?
在IOS 6之前,我使用此URL方案打开本机地图应用程序,并查找从用户当前位置到我创建的地址的路线.
http://maps.google.com/maps?daddr="+地址+"&saddr =当前+位置
这很好用,但现在他们用IOS 6摆脱谷歌地图,我们必须检查他们所在的IOS版本,然后如果他们使用IOS 6.0或更高版本,则将它们引用到新的苹果地图网址方案.我们正在使用的新网址方案是......
http://maps.apple.com/maps?daddr="+地址+"&saddr =当前+位置
这是基于地图网址方案的新文档,可以在这里找到..
无论如何,我已经测试了一堆,它归结为新的苹果地图确实识别当前位置,就像谷歌地图一样.
有谁知道我怎么解决这个问题?
请记住,我正在构建一个带有电话间隙的html应用,因此使用本机代码将起始地址设置为当前位置对我没有帮助.
我正在构建一个可以打开地图应用的应用,其中包含从用户当前位置到另一个位置的路线.代码如下所示:
- (id)resolveDirectionsFromCoordinate:(CLLocationCoordinate2D)startCoordinate toCoordinate:(CLLocationCoordinate2D)endCoordinate
{
NSString* url = [NSString stringWithFormat: @"http://maps.google.com/maps?saddr=%f,%f&daddr=%f,%f",
startCoordinate.latitude, startCoordinate.longitude,
endCoordinate.latitude, endCoordinate.longitude];
[[UIApplication sharedApplication] openURL: [NSURL URLWithString: url]];
return nil;
}
Run Code Online (Sandbox Code Playgroud)
这些在iOS 5.x中运行良好.但是,在iOS 6中,由于地图不再使用Google地图,因此会显示Safari.
有谁知道我应该在iOS 6中调用哪个URL?
我偶尔会遇到iOS 6 MapKit崩溃.无法真正重现它.是什么导致这个?
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000044
Crashed Thread: 0
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0 IMGSGX543GLDriver 0x38f231b4 sgxTextureGetImageRowBytes(GLDTextureRec*, unsigned int, unsigned int) + 8
1 IMGSGX543GLDriver 0x38f23160 CalculateChunkPlaneSizes(GLDTextureRec*, int, unsigned int*, unsigned int*, unsigned int*, unsigned int*) + 104
2 IMGSGX543GLDriver 0x38f25906 sgxConfigureTexturePrivate(GLDTextureRec*) + 82
3 IMGSGX543GLDriver 0x38f24584 glrUpdateTexture + 616
4 libGPUSupportMercury.dylib 0x342c76b6 gldLoadFramebuffer + 102
5 GLEngine 0x31b50e52 gleUpdateDrawFramebufferState + 178
6 GLEngine 0x31b52556 gleDoDrawDispatchCoreES2 + 126
7 …Run Code Online (Sandbox Code Playgroud) ios6-maps ×10
ios6 ×8
ios ×6
mapkit ×4
google-maps ×2
ios5 ×2
iphone ×2
mkmapview ×2
directions ×1
memory ×1
url-scheme ×1