2014-01-19 47 views
0

我正在使用自動合成的@property。當我使用方法訪問該屬性時,我遇到了一個EXC_BAD_ACCESS異常。這裏的是代碼我實現文件的相關章節:屬性訪問上的EXC_BAD_ACCESS,(OS X 10.8.5)

#import "BBBluetoothController.h" 
#import <IOBluetooth/IOBluetooth.h> 

@interface BBBluetoothController() 

@property (nonatomic, strong) CBCentralManager *bluetoothManager; 

@end 

@implementation BBBluetoothController 

- (instancetype)init { 
    if (self = [super init]) { 
     _bluetoothManager = [[CBCentralManager alloc] init]; 
     _bluetoothManager.delegate = self; 
    } 

    return self; 
} 

- (instancetype)initWithCoder:(NSCoder *)aDecoder { 
    if (self = [super init]) { 
     _bluetoothManager = [[CBCentralManager alloc] init]; 
     _bluetoothManager.delegate = self; 
    } 

    return self; 
} 

- (IBAction)startScanning:(id)sender { 
    if (self.bluetoothManager.state == CBCentralManagerStatePoweredOn) { 
     [self.bluetoothManager scanForPeripheralsWithServices:nil options:nil]; 
     self.isScanning = YES; 
    } 
} 

@end 

異常被拋出-startScanning:的方法的第一行。在堆棧跟蹤向下鑽取,例外之我見從CBCentralManager的實現裏面拋出:

0x7fff96c6ed49: leaq -413178944(%rip), %rax ; CBCentralManager._delegate

如果我在-startScanning:打破我可以看到lldb如下:

(lldb) po self 
<BBBluetoothController: 0x1022213b0> 
(lldb) po self.bluetoothManager 
<CBConcreteCentralManager: 0x102222180> 
(lldb) p self.bluetoothManager.state 
(CBCentralManagerState) $2 = CBCentralManagerStateUnknown 
(lldb) po self.bluetoothManager.delegate 
<BBBluetoothController: 0x1022213b0> 

此外,如果我引用-startScanning:中的實例變量而不是屬性,則所有內容都順利運行。我在這裏錯過了很明顯的東西嗎

編輯:

對於它的價值,這只是正常的OS X 10.9,而不是OS X 10.8.5。

回答

0

哎呀!沒有使用指定的初始化程序:-[CBCentralManager initWithDelegate:queue:]