2014-07-10 22 views
0

我有兩個kontakt.io信標。我可以使用AppStore中提供的默認Kontakt.io應用程序來找到它。但是,當我使用SDK並嘗試在我的自定義應用程序中找到它時,該應用程序會請求藍牙,這意味着它會對其執行某些操作,但不會找到信標。iOS kontakt.io信標搜索

根據documentation我只能創建一個KTKBeaconManager類的對象,分配一個KTKBeaconManagerDelegate並調用startFindingDevices方法。之後,只要範圍內的設備發生變化,代表就會收到回調。我使用名爲BeaconManager的類擴展了KTKBeaconManager。這是它的代碼(是的,我已經導入了所有代碼和編譯代碼,我沒有把它放在這裏來節省空間)。

BeaconManager.h

@interface BeaconManager : KTKBeaconManager <KTKBluetoothManagerDelegate> 
@end 

BeaconManager.m

@implementation BeaconManager 
- (instancetype)init 
{ 
    self = [super init]; 
    if (self) { 
     //Setting the delegate to self 
     self.delegate = self; 
    } 
    return self; 
} 

- (void)bluetoothManager:(KTKBluetoothManager *)bluetoothManager didChangeDevices:(NSSet *)devices { 
    NSLog(@"Entered didChangeDevices. Devices size: %d", devices.count); 
} 
@end 

啓動搜索。

BeaconManager *beaconManager = [BeaconManager new]; 
[beaconManager startFindingDevices]; 
[beaconManager reloadDevices]; //Tells the manager to forget all devices and start searching again. 

這實際上是從documentation一個示例代碼,但它不工作。任何人都會經歷類似的事情,並且知道該怎麼做?

回答

2

您的beaconManager在創建後很可能會被釋放。你必須將它移動到一個實例變量。

0

這不是書面直接,但你應該知道什麼是生活對象的範圍 - 它應該是一個屬性,如果你想擁有它的工作都

+0

是的,你說得對的時間等。我曾經是Objective-C的初學者,之前我曾在Java中工作過,在這種情況下可以工作,所以這就是爲什麼我認爲它可能工作。 – Adogeon

+0

奇怪的是,在我知道局部變量的每種編程語言中,當程序正在離開其存在範圍的方法時,它將被釋放。據我所知在Java中也是如此。 –

+0

你是對的,它被釋放,引用被銷燬,因此引用計數器銷燬整個對象,即使實際上有一些代碼在該對象上運行。 即使對象沒有引用,Java仍會將代碼保存在運行的對象中,如果該對象具有引用回調的引用。 – Adogeon