Бесплатное соединение мостов - PullRequest
2 голосов
/ 01 июня 2009

Есть ли какие-либо ошибки для бесплатного соединения между типами NS и CF?

Я не уверен, что делаю это неправильно, но я не могу использовать непрозрачные типы CF, такие как ABAddressID, внутри массива NS.

1 Ответ

8 голосов
/ 01 июня 2009

Есть не так много "гуч". Но это язык на основе Си, поэтому не каждый элемент происходит от CFType. Например, ABRecordID на самом деле является просто 32-битным целым числом. Так что это не CFType. Чтобы добавить ABRecordID в массив, вы должны сделать что-то вроде этого:

NSMutableArray * newArray = [массив NSMutableArray];

ABRecordID someID = 24875247; // вы получаете это где-то из звонка

[newArray addObject: [NSNumber numberWithInt: someID]]; // добавляет ABRecordID в массив, помещая int в NSNumber

Потом, когда вы хотите вернуть номер:

ABRecordID thatID = [[newArray objectAtIndex: 0] intValue]; // получить номер, затем запросить его значение int.

Если вы прочитаете документацию по CFType, он всегда скажет, является ли он бесплатным по мосту с каким-то NS * аналогом.

Цитата из документации: «CFNumber« соединен по мосту без взимания платы »со своим аналогом Cocoa Foundation, NSNumber. Это означает, что тип Core Foundation взаимозаменяем в вызовах функций или методов с мостовым объектом Foundation. Следовательно, в методе, в котором вы видите параметр NSNumber *, вы можете передать CFNumberRef, а в функции, где вы видите параметр CFNumberRef, вы можете передать экземпляр NSNumber. Этот факт также применим к конкретным подклассам NSNumber. См. Интеграция углерода и какао в вашем приложении для получения дополнительной информации о платных звонках. свободный мост. "

Но int в C определенно НЕ является CFNumber.

Надеюсь, это поможет,

- Том

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...