Могу ли я привести NSConcreteValue к его objCType?

Я пишу плагин SIMBL для Chrome, и я получаю конкретный экземпляр с неэкспонированным типом, который написан на C как NSConcreteValue, Я не могу развернуть его или выполнить селекторы на нем, но я могу получить строку типа с [myInstance objCType],

Тип, о котором я говорю, GURL,

Вот некоторый код:

NSArray* tabViews = [tabStripController performSelector:@selector(tabViews)];

for (id tabView in tabViews) {

    id tabController = [tabView valueForKey:@"controller_"];

    id tabTitle = [tabController valueForKey:@"toolTip"];

    id tabUrl =  [tabController valueForKey:@"url_"];

    NSLog(@"%@", tabTitle);
    NSLog(@"%s", [tabUrl objCType]);
}

Название вкладки не является проблемой, так как это NSString,

[tabUrl objCType] возвращает это:

{GURL={basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >={__compressed_pair<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >::__rep, std::__1::allocator<char> >={__rep=(?={__long=QQ*}{__short=(?=Cc)[23c]}{__raw=[3Q]})}}}B{Parsed={Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}{Component=ii}^{Parsed}}{unique_ptr<GURL, std::__1::default_delete<GURL> >={__compressed_pair<GURL *, std::__1::default_delete<GURL> >=^{GURL}}}}

GURL имеет свойство под названием spec_ который я хотел бы получить, чтобы получить строку ASCII экземпляра GURL.
Вот GURL: https://chromium.googlesource.com/chromium/src/+/lkgr/url/gurl.h

Строка objCType помогает?

1 ответ

NSConcreteValue это частный подкласс NSValue,

Я предлагаю вам бросить на NSValue а затем использовать NSValue публичный API.

Если вы хотите быть в большей безопасности, окружите его if ([myObj isKindOfClass:[NSValue class]]) {},

Что касается извлечения типов C++ из NSValue, этот ответ показывает, как это сделать. По сути, вы просто делаете свою переменную и затем вызываете getValue:&myVar как обычно. Вам, конечно, придется скомпилировать как Objective-C++ (используйте .mm расширение) и импортируйте соответствующий заголовок.

Другие вопросы по тегам