如何将Google地图添加到OS X Cocoa应用程序

如何将Google地图添加到OS X Cocoa应用程序,cocoa,google-maps,webkit,Cocoa,Google Maps,Webkit,我正在使用XCode 4开发一个Cocoa应用程序。其中一个窗口具有选项卡视图。其中一个标签应该显示一个位置的谷歌地图。我在选项卡中添加了一个WebView(WebKit框架),并将其定义为一个出口,以便可以使用窗口控制器对其进行操作 我通过以下方式在web视图中显示了一个URL(maps.google.com): [[mapView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ht

我正在使用XCode 4开发一个Cocoa应用程序。其中一个窗口具有选项卡视图。其中一个标签应该显示一个位置的谷歌地图。我在选项卡中添加了一个WebView(WebKit框架),并将其定义为一个出口,以便可以使用窗口控制器对其进行操作

我通过以下方式在web视图中显示了一个URL(maps.google.com):

    [[mapView mainFrame] loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://maps.google.com"]]];
然而,这不是我想要的结果。理想情况下,我希望有一个类似iPhoto的地图视图。从教程中我了解到,要使事情顺利进行,服务器上必须有一个HTML文件。由于我的应用程序是一个本地OS X应用程序(不涉及任何服务器),我想知道是否有其他方法可以做到这一点,并在应用程序的de目录中使用HTML本地(不确定这将如何与绑定到URL的所需Google Maps API密钥配合使用)

编辑:

我已经解决了部分问题。实际上,您可以在本地存储HTML文件(我将我的文件放在项目的“支持文件”文件夹中)。然后,您可以使用以下代码访问此文件:

    NSString *pagePath;
NSBundle *aBundle = [NSBundle mainBundle];
pagePath = [aBundle pathForResource:@"test2" ofType:@"html"];
// make a file: URL out of the path
NSURL *pageURL = [NSURL fileURLWithPath: pagePath];
下一步是使用以下命令显示地图:

[[mapView mainFrame] loadRequest:[NSURLRequest requestWithURL: pageURL]];
这将在“我的网络视图”中显示地图。作为起点,我使用了GoogleMapsAPI教程中的示例。此特定示例显示以瑞典斯德哥尔摩为中心的地图

有一件事我还没有设法解决,那就是如何访问显示映射的Javascript函数(在上面的示例中是使用body onload调用的initialize()函数)。对于我的情况,我想调整这个函数以接受两个参数,一个longtudent和一个latitude,然后从显示地图的Objective-C对象调用它。根据苹果公司的文档,可以使用WebScriptObject实例从Objective-C中调用Javascript,该实例可通过WebView实例访问:

    id wso = [mapView windowScriptObject];

然后使用callWebScriptMethod:withArguments:one应该能够执行Javascript函数。但是,如果我删除body标记的onload并使用WindowScriptInstance调用Javascript initialize()函数,则不会显示映射。有人知道我做错了什么吗?

最后一个难题是正确的时机。在WebView加载完成之前,无法使用Javascript执行任何操作。通过将
webView:didFinishLoadForFrame:
发送到您的控制器,这将被信号传回控制器。查看
WebFrameLoadDelegate
协议参考上的苹果文档。根据所需的行为,控制器应该实现其中一些方法(协议方法是可选的)

运行此方法后,WebView即可工作,您可以访问其中的Javascript函数:

- (void) webView:(WebView *) webView didFinishLoadForFrame:(WebFrame *) frame {
    NSArray *args = [NSArray arrayWithObjects:
                     [NSNumber numberWithFloat: 59.325225],
                     [NSNumber numberWithFloat:18.0700], nil];

    [[webView windowScriptObject] callWebScriptMethod:@"initialize" withArguments:args];
}

一个很好的参考点是,我对其进行了剖析,以使整个工作正常进行。

Hi@Roger,所以基本上您是用html而不是cocoapad设置API键的,不是吗?