0

自動合成を使用しています@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 では動作しません。

4

1 に答える 1