2011-01-12 21 views
3

Mein Wissen über P/Invoke in Monotouch ist ziemlich düster und ich möchte eine private iOS-API für eine UITextView (speziell setContentToHTMLString) aufrufen und ich bin mir nicht sicher, wo ich überhaupt damit anfangen soll.So rufen Sie eine private API von Monotouch auf?

Wenn mir jemand sagen könnte, wie das gemacht wird (oder sogar wo ich anfangen soll!), Wäre das genial.

Nur um zu bemerken, das ist für ein persönliches Projekt, das ich mache, vor allem um mein Wissen zu erweitern. Die Wahrscheinlichkeit, dass diese App an den App Store übermittelt wird, ist sehr gering. Daher unterliegt sie nicht den Bestimmungen des App Stores/der Möglichkeit, dass Apple sie ändert.

bearbeiten

Ist es nur einfach ein Fall von einer Selector mit?

Antwort

2

Der einfachste Weg, es zu nennen einen Selektor, wie folgt aus:

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

Natürlich ist dies wirklich vorsichtig .. Apple bietet duldet keine privaten API-Aufrufe auf Ihre Anwendung, wenn Sie also Wenn Sie planen, mit so etwas gegen die API in den AppStore zu gehen, wie Sie möchten, werden sie Ihre App ablehnen.

+1

PerformSelector funktioniert nur für Selektoren ohne Argumente, fwiw. Ich bin zögerlich zu beantworten, wie Sie dies tun können, da Apple einen guten Grund hat, warum Sie nicht privat Abi nennen sollten, selbst auf eine verschleierte Art und Weise. –

+0

Ich bin ehrlich, diese App wird definitiv nicht in den Appstore gehen. Ich denke, ich habe so viele Apples HI-Regeln gebrochen, dass sie einen Feldtag hatten, um Gründe zu finden, meine App abzulehnen! Aber fair genug, wenn man nur zögerlich antwortet - obwohl ich dies nicht im App Store einreichen werde, bedeutet das Wissen, dass es andere ermutigen könnte, die privaten APIs in ihre App zu integrieren. – Luke

+0

Ich habe das als Antwort akzeptiert, weil es technisch die Frage beantwortet (mindestens private APIs ohne Argumente anrufend). – Luke

0

Wenn Sie versuchen, eine private .net-Methode aufzurufen, können Sie die Reflektion verwenden.

können Sie den Code unten als Beispiel:

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

Dies würde es ermöglichen, um eine Methode aufzurufen, die einen Rückgabetyp haben kann. Sie müssen nur den Rückgabetyp InvokeMember

Das ist im System.Reflection-Namespace

Hoffnung, die hilft werfen!

+0

Leider möchte ich eine private API für ein natives iOS-Objekt (Objective-C) aufrufen, damit dies nicht funktioniert. Wie auch immer, ich wusste nicht, wie man private .net-Methoden aufruft, also ist das sehr nützlich, danke! – Luke

+0

Ah ok, keine Sorgen, ich fange an, iOS-Entwicklung zu lernen, wenn vielleicht krank manchmal irgendwann stoßen :) – WraithNath

Verwandte Themen