2011-01-12 8 views
3

Monotouch内のP/Invokeに関する私の知識はかなり悲惨で、私はUITextView(特にsetContentToHTMLString)のプライベートiOS APIを呼びたいと思っています。MonotouchからプライベートAPIを呼び出す方法は?

これがどのように行われたか(またはどこから始めようとも)誰にでもわかりやすく教えてもらえれば幸いです。

これは私がやっている個人的なプロジェクトのためのものですが、主に私の知識を広げるためです。このアプリがアプリストアに提出される可能性は非常に低いので、App Storeの規制/アップルがそれを変更する可能性はありません。

編集

はただ単にそれSelectorを使用した場合ですか?

答えて

2

このように、セレクタを使用してそれを呼び出すようにするための最も簡単な方法:もちろん

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

、このことについては本当に注意してください。.. Appleはないので、もし、あなたのアプリケーションのプライベートAPI呼び出しを許容しないあなたあなたが望むようにこのようなものをAppStoreに行くことを計画していると、彼らはあなたのアプリを拒否します。

+1

PerformSelectorは引数なしのセレクタ、fwiwでのみ機能します。私はあなたがこれを行う方法に答えることに躊躇しています。なぜなら、リンゴには私的なabiと呼ぶべきではない理由があるからです。 –

+0

私は正直に言うと、このアプリは間違いなくappstoreに行くことはありません。私はAppleのHIルールの多くを壊してしまったと思っています。これは、私のアプリを拒否する理由をフィールドで確認することになります!しかし、答弁に躊躇するだけで十分ですが、私はアプリストアにこれを提出しませんが、知識をそこに置くことは、他人にプライベートAPIをアプリに含めることを奨励する可能性があることを意味します。 – Luke

+0

私はこれを答えとして受け入れました。なぜなら、技術的に質問に答えているからです(少なくともプライベートAPIを引数なしで呼び出す)。 – Luke

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); 

これは、戻り値の型を持つことができる方法を呼び出すことができるようになります。あなたは助けることするSystem.Reflection名前空間

ホープザッツ

InvokeMember

の戻り値の型をキャストする必要があります!

+0

残念ながら、ネイティブのiOSオブジェクト(Objective-C)のプライベートAPIを呼び出したいので、これは機能しませんでした。しかし、プライベートネットメソッドを呼び出す方法もわからなかったので、これはとても便利です。 – Luke

+0

ああ、心配する必要はありません、私はiOS開発を学び始めていますので、いつか病気が出てくることがあります:) – WraithNath

関連する問題