2015-11-07 37 views
0

我已經創建了一個掃描功能,它註冊來自Content對象的所有區域。但是,我似乎無法看到我如何在didRangeBeacons委託方法中檢索此內容對象?此對象包含有關根據信標處理的內容的信息?從檢測到的信標中檢索對象

StartScanning

func startScanning() { 

    print(allContent[0].beacon?.UUID) 

    for beacon in allContent { 

     let uuid = NSUUID(UUIDString: beacon.beacon!.UUID)! 
     let beaconRegion = CLBeaconRegion(proximityUUID: uuid, major: UInt16(beacon.beacon!.major), minor: UInt16(beacon.beacon!.minor), identifier: "MiniBeacon_10260") 


     manager.startMonitoringForRegion(beaconRegion) 
     manager.startRangingBeaconsInRegion(beaconRegion) 

    } 


} 

didRangeBeacons

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { 

    if beacons.count > 0 { 
     let beacon = beacons[0] 
     updateDistance(beacon.proximity) 
    } else { 
     updateDistance(.Near) 
    } 
} 

這裏是內容對象

class Content: Object{ 
    dynamic var id: Int = 0 
    dynamic var date: NSDate = NSDate() 
    dynamic var thumbnail: NSData = NSData() 
    //Customization 
    dynamic var navTitle: String = "" 
    dynamic var navBarColor: String = "" 
    dynamic var navButtonsColor: String = "" 
    dynamic var beacon: Beacon? 
    //Flags 
    dynamic var isPresented: Bool = false 
    dynamic var favorite: Bool = false 
    dynamic var favoriteDate: NSDate = NSDate() 


    override class func primaryKey() -> String { 
     return "id" 
    } 



} 
+0

你能顯示你的內容對象的定義嗎? – davidgyoung

+0

從你的問題中不清楚什麼是Content內容,你如何將它鏈接到Beacon。帶上更多的代碼,他創建了這樣的描述 –

+0

我已經添加了一個內容的例子對象 –

回答

0

某處在應用程序的一個例子就必須有集合對象。在第一個代碼片段中,有一個變量allContent,可能代表這個完整的對象列表。

你可以做的是遍歷所有這些內容對象,以找到其信標標識符與遠程信標相匹配的人。事情是這樣的:

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) { 
    for rangedBeacon in beacons { 
    for content in allContent { 
     if let contentBeacon = content.beacon { 

     if rangedBeacon.proximityUUID.UUIDString == contentBeacon.proximityUUID.UUIDString && 
      rangedBeacon.major.integerValue == contentBeacon.major.integerValue && 
      rangedBeacon.minor.integerValue == contentBeacon.minor.integerValue { 
      // content now contains the content for rangedBeacon 
      // TODO: do something with the matching content here 
     } 
     } 
    } 
    } 
} 

上面的代碼是相當強力,並有可能成爲這樣做的更有效的方式,如果你有存儲在CoreData或其他一些結構由信標可查詢您的Content對象UUID /主/次。

+0

好吧,我使用領域爲後端,是否會更好地進行查詢獲取而不是迭代ike你,所以在這裏? –

+0

是的,那樣會更有效率。但同樣的想法適用。 – davidgyoung