У меня есть arg1, который является IMessage. IMessage определяется как:
struct IMessage {
...
struct CFString _field2;
...
};
и CFString определяется как:
struct CFString {
void **_vptr$CFObject;
struct __CFString *mCFRef;
_Bool mIsMutable;
};
и __CFString определяется как:
struct __CFString;
Моя цель - получить какую-то строку, будь то NSString или CFStringRef из arg1, так как я могу это сделать? Спасибо.
Вот ошибка, которую я получаю, когда пытаюсь nslog mCFRef:
Thread 0 crashed:
# 1 0x97b41edb in _objc_msgSend + 0x0000001B (libobjc.A.dylib + 0x00005edb)
# 2 0x9610b5f2 in __CFStringAppendFormatAndArgumentsAux + 0x00000C42 (CoreFoundation + 0x0002c5f2)
# 3 0x9610a979 in __CFStringCreateWithFormatAndArgumentsAux + 0x00000069 (CoreFoundation + 0x0002b979)
# 4 0x961b3a3e in __CFLogvEx + 0x0000008E (CoreFoundation + 0x000d4a3e)
# 5 0x9415387c in _NSLogv + 0x0000008F (Foundation + 0x0009487c)
# 6 0x941537eb in _NSLog + 0x0000001B (Foundation + 0x000947eb)
mCFRef
в этой структуре. Должно бытьCFStringRef mCFRef;
. ТипCFStringRef
, как и все другие типыBlahBlahRef
, существует для того, чтобы подчеркнуть, что указатель должен быть непрозрачным, а не указателем на открытую для вас структуру. - person Peter Hosey   schedule 23.03.2011vptr
илиmCFRef
строкой: ну,vptr
выглядит как указатель на некоторые указатели, тогда какmCFRef
имеет (внутреннее определение) тип указателя CFString. См. мой первый комментарий по этому вопросу. Независимо от того, помещает ли сторонняя библиотека, которая отправляет вам эту структуруIMessage
, CFString в неправильное место или еще не предоставила ее вам, или что-то в этом роде, это проблема со сторонней библиотекой, а не с Core Foundation. . Вы должны спросить разработчика библиотеки, что случилось. - person Peter Hosey   schedule 24.03.2011