вылетает на машине одного пользователя 10.6.8 с нераспознанным селектором, отправленным в класс - PullRequest
1 голос
/ 31 июля 2011
2011-07-30 18:59:33.545 TokenLock[481:903] +[IOBluetoothDevice deviceWithAddress:]: unrecognized selector sent to class 0x7fff70c18cf8
2011-07-30 18:59:33.546 TokenLock[481:903] An uncaught exception was raised
2011-07-30 18:59:33.547 TokenLock[481:903] +[IOBluetoothDevice deviceWithAddress:]: unrecognized selector sent to class 0x7fff70c18cf8
2011-07-30 18:59:33.548 TokenLock[481:903] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[IOBluetoothDevice deviceWithAddress:]: unrecognized selector sent to class 0x7fff70c18cf8'

Фактический код:

BluetoothDeviceAddress addr;
IOBluetoothNSStringToDeviceAddress(selectedBTDeviceSerial, &addr);
actualBTDevice = [[IOBluetoothDevice alloc] init];
actualBTDevice = [IOBluetoothDevice deviceWithAddress:&addr];

Есть идеи о том, как устранить неполадки, или попросить его переустановить систему IOBluetooth?

1 Ответ

2 голосов
/ 10 сентября 2011

+[IOBluetoothDevice deviceWithAddress:] был представлен в Mac OS X v10.7 SDK. Более ранние версии OS X предоставляют +[IOBluetoothDevice withAddress:] вместо этого. Вы должны быть в состоянии сделать что-то вроде:

if ([[IOBluetoothDevice class] respondsToSelector:@selector(deviceWithAddress:)])
    actualBTDevice = [IOBluetoothDevice deviceWithAddress:&addr];
else
    actualBTDevice = [IOBluetoothDevice withAddress:&addr];

Кроме того, у вас есть утечка объекта, который вы создаете с помощью

actualBTDevice = [[IOBluetoothDevice alloc] init];

, так как вы немедленно назначаете другой объект этой переменной.

...