2011-01-12 52 views
3

我在Monotouch中的P/Invoke的知识是相当可怕的,我想调用一个UITextView(特别是setContentToHTMLString)的私人iOS API,我不知道甚至从哪里开始。如何从Monotouch调用私有API?

如果有人能告诉我这是如何完成的(甚至从哪里开始!),这将是辉煌的。

只是要注意,这是为了我正在做的个人项目,主要是为了拓宽我的知识面。该应用程序被提交到应用程序商店的机会非常渺茫,因此它不受App Store规定/ Apple改变它的可能性的限制。

编辑

难道只是简单地使用Selector的情况?

回答

2

使用一个选择,这样称呼它最简单的方法:

Selector s = new Selector("myPrivateAPIMethodName"); 
MyObjectToCallTheMethodOn.PerformSelector(s, parameterOfTheObject, 0); 

当然,非常小心这个..苹果不会容忍你的应用程序专用的API调用,因此,如果您正在计划以类似于API的方式去AppStore,就像你想要的那样,他们会拒绝你的应用。

0

如果您尝试调用私有.net方法,则可以使用反射。

可以使用下面的代码作为示例:

  object oToInvoke; 

     //Get the type of object 
     Type t = typeof(oToInvoke); 

     //Invoke 'PrivateMethodName' 
     return t.InvokeMember("PrivateMethodName", 
          System.Reflection.BindingFlags.NonPublic 
         | System.Reflection.BindingFlags.Instance 
         | System.Reflection.BindingFlags.InvokeMethod 
         , null 
         , oToInvoke 
         , null); 

这将允许调用其可以具有返回类型的方法。你只需要投InvokeMember

的返回类型

那在System.Reflection命名空间

希望帮助!

+0

不幸的是,我想调用一个本机iOS对象(Objective-C)的私有API,所以这不起作用。但是,我不知道如何调用private .net方法,所以这非常有用,谢谢! – Luke 2011-01-12 11:38:58

+0

好吧,不用担心,我开始学习iOS开发,所以如果有可能生病了:) – WraithNath 2011-01-12 11:43:45