Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何使用这个私有API?_Ios_Iphone Privateapi - Fatal编程技术网

Ios 如何使用这个私有API?

Ios 如何使用这个私有API?,ios,iphone-privateapi,Ios,Iphone Privateapi,我发现类PSCellularDataSettingsDetail及其方法+(void)setEnabled:(BOOL)enabled,我认为这将提供我所需要的,即访问移动数据设置 我通过使用class-dump-z打开编译的Preferences.framework找到了这个方法 现在我发现并试图以这种方式访问该类和方法,但该类也是私有的。如何将此类打开到Xcode?您是否尝试调用performSelector?这通常是调用私有方法的诀窍。记住,使Objective-C中的方法私有化的所有原因

我发现类
PSCellularDataSettingsDetail
及其方法
+(void)setEnabled:(BOOL)enabled
,我认为这将提供我所需要的,即访问移动数据设置

我通过使用
class-dump-z
打开编译的
Preferences.framework
找到了这个方法


现在我发现并试图以这种方式访问该类和方法,但该类也是私有的。如何将此类打开到Xcode?

您是否尝试调用performSelector?这通常是调用私有方法的诀窍。记住,使Objective-C中的方法私有化的所有原因是它没有在h文件中公布。但是,如果您向对象发送消息,并且该对象可以响应该消息,则不管头文件中有什么内容,它都会响应

如果是类方法,如
+(void)setEnabled
,则只需调用
[MyClass performSelector(@selector(myMethod)]
,如果是实例方法,则对作为类实例的变量调用它: MyClass*c=[[MyClass alloc]init]

[c performSelector: @selector(myMethod)]
当您需要传递参数时会变得很棘手,就像在本例中一样,因为performSelector传递参数的唯一方法是它们是否是对象而不是原语。您还可以研究使用objc_msgSend


网上有很多东西解释这两种方法是如何工作的。无论哪种方法,尝试调用私有方法都很麻烦,而且风险很大。

“类是私有的”-你的意思是说它没有通过Preferences.framework二进制文件的符号表公开(即,
static
)?因为那样你就没什么可做的了…@TheParamagneticCroissant当我在我的Xcode项目中尝试使用它时,它是不可见的,所以我猜类定义不在我的项目中导入的任何框架中。我如何才能在我的项目中导入这个私有框架?对不起,我是新手。我如何从名称中获取类然后在上执行选择器?很抱歉,我是新手。@vrwim
NSClassFromString()
objc_getClass()
,等等。如果它是类方法,如+(void)setEnabled,您只需调用[MyClass performSelector(@selector(myMethod)]若它是一个实例方法,那个么您可以在一个变量上调用它,该变量是class@TheParamagneticCroissant如果我的类不在任何可见的框架中?那我该怎么办?@TheParamagneticCroissant我从使用
class-dump-z
转储标题中获得了方法定义。现在我想使用它,但我不知道如何使用。我尝试使用
NSClassFromString
performSelector
,但没有任何效果(字面上)。然后我想看看这个类中是否有任何方法,我使用了。那是空的。有没有办法找到这个方法,或者它受iOS保护?如果我的类不在任何可见的框架中,我该怎么办?在目标C中,私有的意思是头不可见。没有头,程序员就没有idea实现中有什么,除非他们知道、猜测或使用反编译器来找出隐藏的魔法。如何找出隐藏部分中的内容取决于你。一旦你知道其中有一个方法需要调用,你可以使用PerformSelect或objc_msgSend来实现。网上有很多关于如何实现的东西那个