Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.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
Objective c Swift-hereapi示例_Objective C_Swift_Here Api - Fatal编程技术网

Objective c Swift-hereapi示例

Objective c Swift-hereapi示例,objective-c,swift,here-api,Objective C,Swift,Here Api,我正在将hereSDK合并到我的应用程序中。除了一个简单的地图设置,这里网站上的所有例子都显示在objective-C中,我正在尽力将它们翻译成Swift,但它还没有100%起作用。我正试图将两个坐标之间的路线放在地图视图上,如其路线示例所示: 有趣的是,如果我只是调用map,一切都正常,但是如果我添加路由部分,我会得到以下错误: NMAKit致命:未设置许可证密钥、应用程序ID或应用程序代码。启动时出错,这很奇怪,因为凭据没有问题!所以我认为错误完全在于我的快速翻译 目标C中的说明非常清楚:

我正在将hereSDK合并到我的应用程序中。除了一个简单的地图设置,这里网站上的所有例子都显示在objective-C中,我正在尽力将它们翻译成Swift,但它还没有100%起作用。我正试图将两个坐标之间的路线放在地图视图上,如其路线示例所示:

有趣的是,如果我只是调用map,一切都正常,但是如果我添加路由部分,我会得到以下错误: NMAKit致命:未设置许可证密钥、应用程序ID或应用程序代码。启动时出错,这很奇怪,因为凭据没有问题!所以我认为错误完全在于我的快速翻译

目标C中的说明非常清楚:

1。采用NMARouteManagerDelegate协议并创建NMARouteManager:

@interface ClassName : NSObject <NMARouteManagerDelegate>
{
  // Setup your class
}

(void)setup
{
Create a NMARouteManager.**

  NMARouteManager* routeManager = [NMARouteManager sharedRouteManager];

  // Setup delegate
  [routeManager setDelegate:self];
}
NSMutableArray* stops = [[NSMutableArray alloc] initWithCapacity:4];
NMAGeoCoordinates* geoCoord1 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1966286 longitude:-123.0053635];
NMAGeoCoordinates* geoCoord2 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1947289 longitude:-123.1762924];
[stops addObject:geoCoord1];
[stops addObject:geoCoord2];
NMARoutingMode* routingMode = [[NMARoutingMode alloc]
initWithRoutingType:NMARoutingTypeFastest
transportMode:NMATransportModeCar
routingOptions:0];
[routeManager calculateRouteWithStops:stops routingMode:routingMode];
import UIKit



//I changed  the NMARouteManagerDelegate to my original class here
//and couldnt allow NSObject in the class delegation because it conflicts with UIViewController
class TestViewController: UIViewController, NMARouteManagerDelegate {
var mapCircle:NMAMapCircle?




@IBOutlet weak var mapView: NMAMapView!


@IBAction func get_route_action(sender: AnyObject) {


doRouting()

}

let routeManager = NMARouteManager.sharedRouteManager()



 func doRouting() {

 let geoCoord1 = NMAGeoCoordinates(latitude:41.350949, longitude:-74.182097)
 let geoCoord2 = NMAGeoCoordinates(latitude:41.3437502, longitude:-74.1624284)
 let stops = [geoCoord1, geoCoord2]
 routeManager.calculateRouteWithStops(stops)
 }




 func routeManager(routeManager: NMARouteManager!, didCalculateRoutes routes: [AnyObject]!, withError error: NMARouteManagerError, violatedOptions: [AnyObject]!) {
 print(routes)
 print(error)
 print(violatedOptions)
 guard error == NMARouteManagerError.None else {
 print("Route calculation error: \(error)")
 return
 }
 guard let routes = routes, route = routes[0] as? NMARoute else {
 print("Route calculation error: no routes")
 return
 }

 let mapRoute = NMAMapRoute(route: route)
 // Render the route on the map
 mapView.addMapObject(mapRoute)
 }




override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    //mapView.useHighResolutionMap = true
    var coordinates: NMAGeoCoordinates
    coordinates = NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
    mapView.zoomLevel = 13.2
    mapView.setGeoCenter(coordinates, withAnimation: NMAMapAnimation.Linear)
    mapView.copyrightLogoPosition = NMALayoutPosition.BottomCenter
    addMapCircle()
}

func addMapCircle() {
    if mapCircle == nil {
        let coordinates: NMAGeoCoordinates =
            NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
        mapCircle = NMAMapCircle(geoCoordinates: coordinates, radius: 50)
        mapView.addMapObject(mapCircle)
    }
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



}
3。创建NMARoutingMode并设置其NMARoutingMode、NMARoutingType和NMARoutingOption值:

@interface ClassName : NSObject <NMARouteManagerDelegate>
{
  // Setup your class
}

(void)setup
{
Create a NMARouteManager.**

  NMARouteManager* routeManager = [NMARouteManager sharedRouteManager];

  // Setup delegate
  [routeManager setDelegate:self];
}
NSMutableArray* stops = [[NSMutableArray alloc] initWithCapacity:4];
NMAGeoCoordinates* geoCoord1 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1966286 longitude:-123.0053635];
NMAGeoCoordinates* geoCoord2 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1947289 longitude:-123.1762924];
[stops addObject:geoCoord1];
[stops addObject:geoCoord2];
NMARoutingMode* routingMode = [[NMARoutingMode alloc]
initWithRoutingType:NMARoutingTypeFastest
transportMode:NMATransportModeCar
routingOptions:0];
[routeManager calculateRouteWithStops:stops routingMode:routingMode];
import UIKit



//I changed  the NMARouteManagerDelegate to my original class here
//and couldnt allow NSObject in the class delegation because it conflicts with UIViewController
class TestViewController: UIViewController, NMARouteManagerDelegate {
var mapCircle:NMAMapCircle?




@IBOutlet weak var mapView: NMAMapView!


@IBAction func get_route_action(sender: AnyObject) {


doRouting()

}

let routeManager = NMARouteManager.sharedRouteManager()



 func doRouting() {

 let geoCoord1 = NMAGeoCoordinates(latitude:41.350949, longitude:-74.182097)
 let geoCoord2 = NMAGeoCoordinates(latitude:41.3437502, longitude:-74.1624284)
 let stops = [geoCoord1, geoCoord2]
 routeManager.calculateRouteWithStops(stops)
 }




 func routeManager(routeManager: NMARouteManager!, didCalculateRoutes routes: [AnyObject]!, withError error: NMARouteManagerError, violatedOptions: [AnyObject]!) {
 print(routes)
 print(error)
 print(violatedOptions)
 guard error == NMARouteManagerError.None else {
 print("Route calculation error: \(error)")
 return
 }
 guard let routes = routes, route = routes[0] as? NMARoute else {
 print("Route calculation error: no routes")
 return
 }

 let mapRoute = NMAMapRoute(route: route)
 // Render the route on the map
 mapView.addMapObject(mapRoute)
 }




override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    //mapView.useHighResolutionMap = true
    var coordinates: NMAGeoCoordinates
    coordinates = NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
    mapView.zoomLevel = 13.2
    mapView.setGeoCenter(coordinates, withAnimation: NMAMapAnimation.Linear)
    mapView.copyrightLogoPosition = NMALayoutPosition.BottomCenter
    addMapCircle()
}

func addMapCircle() {
    if mapCircle == nil {
        let coordinates: NMAGeoCoordinates =
            NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
        mapCircle = NMAMapCircle(geoCoordinates: coordinates, radius: 50)
        mapView.addMapObject(mapCircle)
    }
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



}
4。计算路线:

@interface ClassName : NSObject <NMARouteManagerDelegate>
{
  // Setup your class
}

(void)setup
{
Create a NMARouteManager.**

  NMARouteManager* routeManager = [NMARouteManager sharedRouteManager];

  // Setup delegate
  [routeManager setDelegate:self];
}
NSMutableArray* stops = [[NSMutableArray alloc] initWithCapacity:4];
NMAGeoCoordinates* geoCoord1 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1966286 longitude:-123.0053635];
NMAGeoCoordinates* geoCoord2 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1947289 longitude:-123.1762924];
[stops addObject:geoCoord1];
[stops addObject:geoCoord2];
NMARoutingMode* routingMode = [[NMARoutingMode alloc]
initWithRoutingType:NMARoutingTypeFastest
transportMode:NMATransportModeCar
routingOptions:0];
[routeManager calculateRouteWithStops:stops routingMode:routingMode];
import UIKit



//I changed  the NMARouteManagerDelegate to my original class here
//and couldnt allow NSObject in the class delegation because it conflicts with UIViewController
class TestViewController: UIViewController, NMARouteManagerDelegate {
var mapCircle:NMAMapCircle?




@IBOutlet weak var mapView: NMAMapView!


@IBAction func get_route_action(sender: AnyObject) {


doRouting()

}

let routeManager = NMARouteManager.sharedRouteManager()



 func doRouting() {

 let geoCoord1 = NMAGeoCoordinates(latitude:41.350949, longitude:-74.182097)
 let geoCoord2 = NMAGeoCoordinates(latitude:41.3437502, longitude:-74.1624284)
 let stops = [geoCoord1, geoCoord2]
 routeManager.calculateRouteWithStops(stops)
 }




 func routeManager(routeManager: NMARouteManager!, didCalculateRoutes routes: [AnyObject]!, withError error: NMARouteManagerError, violatedOptions: [AnyObject]!) {
 print(routes)
 print(error)
 print(violatedOptions)
 guard error == NMARouteManagerError.None else {
 print("Route calculation error: \(error)")
 return
 }
 guard let routes = routes, route = routes[0] as? NMARoute else {
 print("Route calculation error: no routes")
 return
 }

 let mapRoute = NMAMapRoute(route: route)
 // Render the route on the map
 mapView.addMapObject(mapRoute)
 }




override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    //mapView.useHighResolutionMap = true
    var coordinates: NMAGeoCoordinates
    coordinates = NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
    mapView.zoomLevel = 13.2
    mapView.setGeoCenter(coordinates, withAnimation: NMAMapAnimation.Linear)
    mapView.copyrightLogoPosition = NMALayoutPosition.BottomCenter
    addMapCircle()
}

func addMapCircle() {
    if mapCircle == nil {
        let coordinates: NMAGeoCoordinates =
            NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
        mapCircle = NMAMapCircle(geoCoordinates: coordinates, radius: 50)
        mapView.addMapObject(mapCircle)
    }
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



}
5。要接收路由计算的结果,请实现NMARouteManagerDelegate协议方法 routeManager:DidCalculatorOutes:withError:violatedOptions:在您的代理类中。

注意:即使收到NMAROUTEMANAGERRORROVERLEATESOPTIONS错误,也会返回路由。由您来处理这些违反路由选项的路由结果

-(void) routeManager: (NMARouteManager*)routeManager
  didCalculateRoutes:(NSArray*)routes
  withError:(NMARouteManagerError)error
  violatedOptions:(NSArray*)violatedOptions
{
  // If the route was calculated successfully
  if (!error && routes && routes.count > 0)
  {
    NMARoute* route = [routes objectAtIndex:0];
    // Render the route on the map
    mapRoute = [NMAMapRoute mapRouteWithRoute:route];
    [mapView addMapObject:mapRoute];
  }
  else if (error)
  {
    // Display a message indicating route calculation failure
  }
}
这就是我在Swift中要做的:

@interface ClassName : NSObject <NMARouteManagerDelegate>
{
  // Setup your class
}

(void)setup
{
Create a NMARouteManager.**

  NMARouteManager* routeManager = [NMARouteManager sharedRouteManager];

  // Setup delegate
  [routeManager setDelegate:self];
}
NSMutableArray* stops = [[NSMutableArray alloc] initWithCapacity:4];
NMAGeoCoordinates* geoCoord1 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1966286 longitude:-123.0053635];
NMAGeoCoordinates* geoCoord2 = [[NMAGeoCoordinates alloc]
initWithLatitude:49.1947289 longitude:-123.1762924];
[stops addObject:geoCoord1];
[stops addObject:geoCoord2];
NMARoutingMode* routingMode = [[NMARoutingMode alloc]
initWithRoutingType:NMARoutingTypeFastest
transportMode:NMATransportModeCar
routingOptions:0];
[routeManager calculateRouteWithStops:stops routingMode:routingMode];
import UIKit



//I changed  the NMARouteManagerDelegate to my original class here
//and couldnt allow NSObject in the class delegation because it conflicts with UIViewController
class TestViewController: UIViewController, NMARouteManagerDelegate {
var mapCircle:NMAMapCircle?




@IBOutlet weak var mapView: NMAMapView!


@IBAction func get_route_action(sender: AnyObject) {


doRouting()

}

let routeManager = NMARouteManager.sharedRouteManager()



 func doRouting() {

 let geoCoord1 = NMAGeoCoordinates(latitude:41.350949, longitude:-74.182097)
 let geoCoord2 = NMAGeoCoordinates(latitude:41.3437502, longitude:-74.1624284)
 let stops = [geoCoord1, geoCoord2]
 routeManager.calculateRouteWithStops(stops)
 }




 func routeManager(routeManager: NMARouteManager!, didCalculateRoutes routes: [AnyObject]!, withError error: NMARouteManagerError, violatedOptions: [AnyObject]!) {
 print(routes)
 print(error)
 print(violatedOptions)
 guard error == NMARouteManagerError.None else {
 print("Route calculation error: \(error)")
 return
 }
 guard let routes = routes, route = routes[0] as? NMARoute else {
 print("Route calculation error: no routes")
 return
 }

 let mapRoute = NMAMapRoute(route: route)
 // Render the route on the map
 mapView.addMapObject(mapRoute)
 }




override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)
    //mapView.useHighResolutionMap = true
    var coordinates: NMAGeoCoordinates
    coordinates = NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
    mapView.zoomLevel = 13.2
    mapView.setGeoCenter(coordinates, withAnimation: NMAMapAnimation.Linear)
    mapView.copyrightLogoPosition = NMALayoutPosition.BottomCenter
    addMapCircle()
}

func addMapCircle() {
    if mapCircle == nil {
        let coordinates: NMAGeoCoordinates =
            NMAGeoCoordinates(latitude: 41.350949, longitude: -74.182097)
        mapCircle = NMAMapCircle(geoCoordinates: coordinates, radius: 50)
        mapView.addMapObject(mapCircle)
    }
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}



}

我试过你的代码,基本上对我来说效果很好

但我在AppDelegate.swift中另外添加了凭据:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        NMAApplicationContext.setAppId(YourAppID, appCode: YourToken, licenseKey: YourKey);
        return true;
    }

这一点很关键,因为如果它丢失了,它会抛出您得到的错误。

错误发生在哪一行?Xcode中没有错误!编译器对我的代码没有问题。我从这里的API中得到一个错误,我没有正确地进行身份验证,这让我和这里的人都感到困惑。我假设我的Swift版本与Objective-C指令没有正确地发送某些内容。但是HERE错误返回到您的代码的哪一行?很抱歉延迟,在下面一行:let routeManager=nmarueManager.SharedLooteManager(),错误是:NMAKit致命:许可证密钥,应用程序ID,或应用程序代码未设置。(lldb)在该行上放置一个断点,并在您认为设置了许可证密钥、应用程序ID和应用程序代码的行上放置一个断点,然后查看哪个实际上是首先执行的。我没有看到您设置任何许可证密钥等,而您的
let routeManager
在您的TestViewController实例化时发生,这让我觉得您确实过早地调用了
let routeManager
。哇,这太奇怪了,因为我的凭据在AppDelegate.swift中设置得正是如此。你确定你完全按照我在上面发布的那样尝试了我的代码吗?请再回复。因为如果是这样,那么我的凭证必须与常规映射一起工作,但不被批准用于路由。我现在就和这里的人谈谈。马可,再一次,请回答我。您是否尝试过我的确切Swift代码,或者您的意思是说它在目标C中有效?我举了这个Swift示例,并添加了您的路线计算和委派代码。请确保您设置了代码、令牌和许可证密钥。一些旧的示例有时会丢失许可证密钥。现在一切正常。有几件事要处理。主要是不能从类的开始立即调用doRouting()函数,因为它当时还没有映射。身份验证没有问题。我现在有完整的Swift工作代码。如果有人想看一看,请联系我。