Как бы я подключил приведение NSNumber к ABRecordID в iOS
Я начинаю изучать программирование с Objective-C, и не очень разбираюсь в C. Итак, бридж-кастинг в iOS 6 все еще несколько сбивает меня с толку.
Вот сценарий:
У меня есть человек ABRecordID, хранящийся в CoreData как атрибут "NSNumber". Позже я хотел бы получить доступ к этому человеку напрямую, поэтому я хочу использовать ABRecordID этого человека для доступа к контактной информации с помощью ABAddressBook. Заметил это ABAddressBookGetPersonWithRecordID
нужен ABRecordID, ниже показано, как я выполняю приведение в моем коде...
address_book = ABAddressBookCreate();
ABRecordID rec_id = (__bridge ABRecordID)person.record_id;
Тем не менее, это не было успешным, и мне дали incompatible types casting 'int' into 'ABRecordID' (aka 'int') with a __bridge cast
,
Уже в замешательстве, что было бы правильным способом соединить приведение между типом ARC и типом CF?
Кроме того, в каком случае я должен использовать (__bridge retained)
вместо (__bridge)
?
1 ответ
ABRecordID
является синонимом (typedef) для int32_t
который является 32-разрядным целым числом. Таким образом, приведение типов не является правильным подходом. Вы хотите создать NSNumber
со значением идентификатора.
ABRecordId rec_id = person.record_id;
NSNumber *wrapper = [NSNumber numberWithInt:(int)rec_id];
и позже:
NSNumber *wrapper = ...
ABRecordId rec_id = (ABRecordId)[wrapper intValue];
Обратите внимание, что мосты и ARC не имеют значения при переходе в / из ABRecordId и NSNumber. Там нет использования любого из CF
типы в этом случае. Вы будете знать, когда вы используете CF
типы, потому что у вас будет переменная, тип которой начинается с CF
(такие как CFArrayRef
).