2

我正在为 Chrome 编写一个 SIMBL 插件,并且我得到了一个具有未公开类型的特定实例,该实例用 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_,我想访问它以获取 GURL 实例的 ASCII 字符串。
这是 GURL:https ://chromium.googlesource.com/chromium/src/+/lkgr/url/gurl.h

objCType 字符串有什么帮助吗?

4

1 回答 1

2

NSConcreteValue是 的私有子类NSValue

我建议您转换为NSValue然后使用NSValue公共 API。

如果您想更加安全,请用if ([myObj isKindOfClass:[NSValue class]]) {}.

关于从中提取 C++ 类型NSValue此答案显示了如何执行此操作。本质上,您只需制作变量,然后getValue:&myVar照常调用。当然,您必须编译为 Objective-C++(使用.mm扩展),并导入相关的头文件。

于 2017-03-07T14:43:13.900 回答