适用于iOS的Google Maps API API密钥的例外情况

Jer*_*hao 5 google-maps api-key ios swift

我正在使用适用于IOS的Google Maps API开发iOS应用.我为我的项目安装了CocoaPod,并根据Google Developer上的教程配置它们.但是,当我运行我的项目时,它说

***由于未捕获的异常'GMSServicesException'而终止应用程序,原因是:'Google Maps SDK for iOS必须>在使用之前通过[GMSServices provideAPIKey:...]进行初始化

但我已经在AppDelegate.swift上调用了"GMSServices.provideAPIKey.以下是代码:

....
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    GMSServices.provideAPIKey("***********************")
    return true
}
....
Run Code Online (Sandbox Code Playgroud)

(**************)是我的API密钥.

由于Google Maps API使用Objective C,因此我创建了一个桥接头来导入库.

我试图在[application:didFinishLaunchingWithOption]上设置断点.但它会在运行该函数之前引发异常,我认为这很奇怪.

对此感到困惑.提前致谢.

Jer*_*hao 5

问题最终解决了,原因是我在一个模型类中使用Google Maps库初始化字段,它将在应用程序运行之前创建.所以这个错误发生了.当我将此变量移动到方法中时,问题就解决了.以下是导致错误的代码:

class PlaceManager {
    let placeClient = GMSPlacesClient()
    ...
    func getSuggestions(queryString:String) -> [String]{
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

class PlaceManager {
    func getSuggestions(queryString:String) -> [String]{
        let placeClient = GMSPlacesClient()
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)


Sye*_*sar 3

将调用移至willFinishLaunchingWithOptions ,而不是didFinishLaunchingWithOptions。在状态恢复发生之后但在显示 app\xe2\x80\x99s 窗口和其他 UI 之前调用此方法。(在您的情况下,这可能是一个使用 Google Map API 的 UI)

\n\n
func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {\n    // Override point for customization after application launch.\nGMSServices.provideAPIKey("***********************")\n\n    return true\n}\n
Run Code Online (Sandbox Code Playgroud)\n