2014-01-13 5 views
5

Ich habe in Objective-C-Protokolle und Delegaten gesucht und versucht, eine benutzerdefinierte in Xamarin.iOS zu implementieren. Ich wurde nach dem Vorbild in der Xamarin Dokumentation für „Binding Protocols“Xamarin.iOS kann den Typ BaseType-Attribut nicht finden

[BaseType (typeof(NSObject))] 
[Model][Protocol] 
public interface INITableViewCellDelegate { 

} 

ich aus irgendeinem Grunde nicht das Attribut Basetype finden. Ich kann nicht darauf verweisen. Meine aktuelle Liste der Namespaces für das Projekt ist:

using System; 
using System.Drawing; 
using MonoTouch.Foundation; 
using MonoTouch.UIKit; 
using MonoTouch.CoreGraphics; 
using MonoTouch.ObjCRuntime; 

Ich erwarte, dass es unter System oder MonoTouch.ObjCRuntime sein sollte. Kann jemand etwas Licht abwerfen? Ich habe andere Fragen zu StackOverflow mit Bindungsprotokollen überprüft und viele Beispiele zeigen dieselben MonoTouch-Usings.

Danke

+0

In neueren Builds gibt es tatsächlich ein Problem w/XS. Siehe [dieser Fehler] (https://bugzilla.xamarin.com/show_bug.cgi?id=52553) – bunkerdive

Antwort

6

Stellen Sie sicher, ein iOS verwenden zur Laufzeit Binding Projekt

enter image description here

+0

Vielleicht hätte ich ein bisschen mehr geklärt. Ist es möglich, eigene C# -Protokolle zu erstellen? Ich versuche nicht, aus einer nativen Bibliothek zu binden. Ich weiß, dass ich .NET-Ereignisse verwenden könnte, aber ich war daran interessiert, den Delegate-Ansatz zu verwenden, da ich versuche, einige Delegaten zu erstellen, die ich auf der UITableView-Ebene auslösen möchte. Ich denke, ich gehe die Übung durch, um zu sehen, ob es möglich ist. Je mehr ich darüber nachdenke, scheint es, dass das Basistyp-Attribut nicht notwendig ist. – JamWils

+0

Ahh ich sehe, ja die Xamarin.iOS API hat Delegaten, die Sie wie Schnittstellen in C# implementieren können, sollte dieses Dokument Ihnen helfen, zu beginnen http://docs.xamarin.com/guides/ios/application_fundamentals/delegates,_protocols, _and_events / – dalexsoto

0

[BaseType] Attribute werden nur in Projekten des Typs "iOS Binding Project" verwendet und sind nicht verfügbar.

Also stellen Sie sicher, dass Sie ein "iOS Binding Project" machen, das von den btouch Tools verarbeitet wird und Bindungen für Ihre native Bibliothek generiert.

0

Ich hatte das gleiche Problem, weil ich blind die Dateien hinzugefügt habe, die Sharpie zu meinem Projekt erstellt, ohne nachzudenken. Wenn Sie eine neue iOS-Bindungsbibliothek erstellen, erstellt sie zwei Dateien: ApiDefinition.cs und Structs.cs. Diese sind leer mit Ausnahme eines Namensbereichs, der dem Projektnamen entspricht.

Wenn Sharpie ausgeführt wird, erstellt es zwei Dateien: ApiDefinitions.cs und StructsAndEnums.cs. Dies sind die reinen Definitionen und existieren nicht in einem Namensraum. Fügen Sie diese Dateien nicht zu Ihrem Projekt hinzu. Stattdessen;

  1. Kopieren Sie alle Inhalte von ApiDefinitions.cs und es in den leeren Namensraum in ApiDefinition.cs einfügen.
  2. Kopieren Sie den gesamten Inhalt von StructsAndEnums.cs und fügen Sie ihn in den leeren Namespace in Structs.cs ein.

Hoffentlich sollte es jetzt bauen.

Verwandte Themen