自動合成を使用しています@property
。メソッドでプロパティにアクセスすると、EXC_BAD_ACCESS
例外が発生します。私の実装ファイルからのコードの関連セクションは次のとおりです。
#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 では動作しません。