2014-01-13 2 views
5

Я изучал протоколы и делегаты Objective-C и пытался реализовать пользовательский интерфейс в Xamarin.iOS. Я следовал примеру в документации Xamarin для «связывания протоколов»Xamarin.iOS не может найти тип атрибута BaseType

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

} 

по какой-то причине я не могу найти атрибут BaseType. Я не могу ссылаться на него. Мой текущий список пространств имен для проекта являются:

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

Я ожидал, что она должна находиться под системой или MonoTouch.ObjCRuntime. Может ли кто-нибудь пролить свет? Я проверил другие вопросы по StackOverflow, включающие протоколы привязки, и многие примеры показывают те же самые применения MonoTouch.

Спасибо

+0

В более поздних сборках на самом деле существует проблема w/XS. См. [Эта ошибка] (https://bugzilla.xamarin.com/show_bug.cgi?id=52553) – bunkerdive

ответ

6

Убедитесь, что вы используете IOS привязку проекта

enter image description here

+0

Возможно, я должен был уточнить немного больше. Возможно ли генерировать наши собственные протоколы C#. Я не пытаюсь связать себя из родной библиотеки. Я знаю, что могу использовать .NET-события, но мне было интересно использовать подход делегата, так как я пытаюсь создать пару делегатов, которые я хочу запустить на уровне UITableView. Думаю, я проведу упражнение, чтобы посмотреть, возможно ли это. Чем больше я думаю об этом, хотя, похоже, атрибут basetype не нужен. – JamWils

+0

Ahh Я вижу, да, API Xamarin.iOS имеет делегаты, которые вы можете реализовать как интерфейсы на C#, этот документ должен помочь вам приступить к работе http://docs.xamarin.com/guides/ios/application_fundamentals/delegates,_protocols, _and_events / – dalexsoto

0

[BaseType] атрибуты используется только в проектах типа "прошивка Binding Project" и не доступны во время выполнения.

Поэтому убедитесь, что вы выполняете «Проект привязки iOS», который будет обрабатываться с помощью инструментов btouch и будет генерировать привязки для вашей родной библиотеки.

0

У меня была эта же проблема, потому что я просто слепо добавил файлы, которые Sharpie создает в мой проект, не задумываясь.

Когда вы создаете новую библиотеку привязки iOS, она создает два файла: ApiDefinition.cs и Structs.cs. Они пусты, за исключением пространства имен, которое соответствует имени проекта.

При запуске Sharpie он создает два файла: ApiDefinitions.cs и StructsAndEnums.cs. Это чистые определения и не существуют в пространстве имен. Не добавляйте эти файлы в свой проект. Вместо;

  1. Скопируйте все содержимое ApiDefinitions.cs и вставить его в пустое пространство имен в ApiDefinition.cs.
  2. Скопируйте все содержимое StructsAndEnums.cs и вставьте его в пустое пространство имен в Structs.cs.

Надеюсь, теперь он должен строиться.

Смежные вопросы