首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Swift -获取iBeacon -外部类

Swift -获取iBeacon -外部类
EN

Stack Overflow用户
提问于 2014-10-02 09:24:28
回答 3查看 552关注 0票数 0

我已经建立了一个应该接受ibeacons的类。据我所知,我什么都做得对。但不起作用。我的应用程序不要求位置权限,位置管理器也没有开始更新。我还在plist中设置了属性。

NSLocationWhenInUseUsageDescription

NSLocationAlwaysUsageDescription

只有当我在AppDelegate中正确地初始化所有内容时,它才能工作。就像这里的教程一样。

http://ibeaconmodules.us/blogs/news/14702963-tutorial-swift-based-ibeacon-app-development-with-corelocation-on-apple-ios-7-8

但我想把这个服务外包给一个班。我不知道我做错了什么。我是斯威夫特的新手,在目标C中,它一直有效。有谁可以帮我?

这里的代码-

ViewController

导入UIKit

类ViewController: UIViewController,BeaconServiceProtocolDelegate {

代码语言:javascript
运行
复制
override func viewDidLoad() {
    super.viewDidLoad()

    //Set BackgroundImage and hide Navigationbar
    self.view.backgroundColor = UIColor(patternImage: UIImage(named:"bg"));
    self.navigationController?.navigationBar.hidden = true

     ////////////////////////create new Beacon Service which is looking for beacon which are given with the parameters
    var beaconAdvertiseService = BeaconService(parauuidString: "F0018B9B-7509-4C31-A905-1A27D39C003C",parabeaconIdentifier:"iBeaconTalentTeamAudi");
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()

}

//Notification if our service found a beacon
func sendLocalNotificationWithMessage(message: String!) {
    let notification:UILocalNotification = UILocalNotification()
    notification.alertBody = message
    UIApplication.sharedApplication().scheduleLocalNotification(notification)
}

//Delegate from BeaconService
func foundBeacon() {
    println("Found Beacon")
}

}

,当然还有BeaconAdvertiseService

代码语言:javascript
运行
复制
import Foundation
import CoreBluetooth
import CoreLocation

//BeaconService Delegate
protocol BeaconServiceProtocolDelegate
{
    func foundBeacon()
}


import Foundation
import CoreBluetooth
import CoreLocation

//BeaconService Delegate
protocol BeaconServiceProtocolDelegate
{
    func foundBeacon()
}

class BeaconService: NSObject, CLLocationManagerDelegate{

    let beaconServiceDelegate:BeaconServiceProtocolDelegate?

    let uuidString:String//UUID Beacon as String
    let beaconIdentifier:String//Identifier Beacon
    let beaconUUID:NSUUID//UUID Beacon
    let beaconRegion:CLBeaconRegion//Beacon Region
    let locationManager:CLLocationManager ////location manager

     ////////////////////////Init class (constructor) // Params UUID as String & and Identifier from beacon
    init(parauuidString:String,parabeaconIdentifier:String) {



        self.uuidString         = parauuidString
        self.beaconIdentifier   = parabeaconIdentifier
        self.beaconUUID         = NSUUID(UUIDString: self.uuidString)
        self.beaconRegion       = CLBeaconRegion(proximityUUID:self.beaconUUID,identifier: self.beaconIdentifier)
        self.locationManager         = CLLocationManager();


        super.init()
        self.initLocationMangager()

    }

    ////////////////////////Init location manager
    private func initLocationMangager()
    {
        println(self.locationManager)

        if(self.locationManager.respondsToSelector("requestAlwaysAuthorization")) {
            locationManager.requestAlwaysAuthorization()
        }

        self.locationManager.delegate = self
        self.locationManager.pausesLocationUpdatesAutomatically = false

        self.locationManager.startMonitoringForRegion(beaconRegion)
        self.locationManager.startRangingBeaconsInRegion(beaconRegion)
        self.locationManager.startUpdatingLocation()
    }


    //////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////
    ////////////////////////LocationManager Delegates
    //////////////////////////////////////////////////////////
    //////////////////////////////////////////////////////////

    ////////////////////////LocationManager didStartMonitoringForRegion
    func locationManager(manager: CLLocationManager!, didStartMonitoringForRegion region: CLRegion!) {
        manager.startRangingBeaconsInRegion(region as CLBeaconRegion)
        println("Did Start")
    }

    ////////////////////////LocationManager didEnterRegion
    func locationManager(manager: CLLocationManager!, didEnterRegion region: CLRegion!) {
        manager.startRangingBeaconsInRegion(region as CLBeaconRegion)
    }

    ////////////////////////LocationManager didRangeBeacons
    func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {

            var message:String = ""

            if(beacons.count > 0) {
                let nearestBeacon:CLBeacon = beacons[0] as CLBeacon

                switch nearestBeacon.proximity {
                case CLProximity.Far:
                    message = "Far"
                case CLProximity.Near:
                    message = "Near"
                case CLProximity.Immediate:
                    message = "Immediate"
                case CLProximity.Unknown:
                    return
                }
            } else {
                message = "No Beacons"
            }

            //Call BeaconServiceDelegate
            beaconServiceDelegate?.foundBeacon()
    }

    ////////////////////////LocationManager monitoringDidFailForRegion
    func locationManager(manager: CLLocationManager!, monitoringDidFailForRegion region: CLRegion!, withError error: NSError!) {
        println(error)
    }

    ////////////////////////LocationManager didExitRegion
    func locationManager(manager: CLLocationManager!, didExitRegion region: CLRegion!) {
        manager.stopRangingBeaconsInRegion(region as CLBeaconRegion)

    }

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-02 11:57:40

看起来,您正在将广告服务分配给viewDidLoad末尾的一个局部变量。此实例将在此方法的末尾被销毁(一行后;)

请确保将您的广告客户分配给实例变量或属性,并将self (您的视图控制器)指定为您的广告客户的代表。

这应该能起作用。

票数 0
EN

Stack Overflow用户

发布于 2014-10-02 10:34:48

我看到至少有一件事很简单。看起来,initLocationMangager()方法从未被调用过。您可能应该从init(parauuidString:String,parabeaconIdentifier:String)方法中添加对此方法的调用。

票数 0
EN

Stack Overflow用户

发布于 2014-10-02 10:38:33

对不起,我忘了,我已经拿出来了。但它也不符合召唤

代码语言:javascript
运行
复制
self.initLocationMangager()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26157899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档