2016-10-27 2 views
0

Я пытаюсь связать библиотеку, и я наткнулся на этот вопрос:Цель Находчивые иногда добавляет я @protocols

// @interface PTPusher : NSObject <PTPusherConnectionDelegate, PTPusherEventBindings> 
[BaseType(typeof(NSObject))] 
interface PTPusher : IPTPusherConnectionDelegate, IPTPusherEventBindings 

IPTPusherConnectionDelegate и IPTPusherEventBindings не мог быть найден, но их неизменное имя не существует:

// @protocol PTPusherConnectionDelegate <NSObject> 
[Protocol, Model] 
[BaseType(typeof(NSObject))] 
interface PTPusherConnectionDelegate 

Почему Objective Sharpie добавляет I в список наследуемых интерфейсов, но не в самом имени интерфейса?

Что я должен изменить, чтобы исправить это? Добавить ли я имя интерфейса или удалить I из списка унаследованных интерфейсов? Или я могу исправить это, не меняя их, и просто добавив или удалив атрибуты для этих классов/интерфейсов?

+0

Не дубликат: http://stackoverflow.com/questions/36448006/sharpie -binding-object-c-protocols-issue Это не отвечает на мои вопросы. Это говорит мне, что я могу удалить I, но мне нужна подробная информация о том, что создает Objective Sharpie и как я должен решить эту проблему. – vrwim

+0

Найден ответ в https://developer.xamarin.com/guides/cross-platform/macios/binding/binding-types-reference/#Protocols – vrwim

ответ

1

Начиная с MonoTouch 7.0 была добавлена ​​новая улучшенная функциональность связывания протоколов. Любое определение, которое содержит [Protocol] атрибут будет фактически генерировать три вспомогательные классов, которые значительно улучшают способ, которым вы потребляете протоколы:

// Full method implementation, contains all methods 
class MyProtocol : IMyProtocol { 
    public void Say (string msg); 
    public void Listen (string msg); 
} 

// Interface that contains only the required methods 
interface IMyProtocol: INativeObject, IDisposable { 
    [Export ("say:”)] 
    void Say (string msg); 
} 

// Extension methods 
static class IMyProtocol_Extensions { 
    public static void Optional (this IMyProtocol this, string msg); 
    } 
} 

Также

Если вы хотите использовать определение протокола в вашем API вам нужно будет написать скелетные пустые интерфейсы в вашем определении API. Если вы хотите использовать MyProtocol в API, вам нужно будет сделать это:

[BaseType (typeof (NSObject))] 
[Model, Protocol] 
interface MyProtocol { 
    // Use [Abstract] when the method is defined in the @required section 
    // of the protocol definition in Objective-C 
    [Abstract] 
    [Export ("say:")] 
    void Say (string msg); 

    [Export ("listen")] 
    void Listen(); 
} 

interface IMyProtocol {} 

[BaseType (typeof(NSObject))] 
interface MyTool { 
    [Export ("getProtocol")] 
    IMyProtocol GetProtocol(); 
} 

Источник: https://developer.xamarin.com/guides/cross-platform/macios/binding/binding-types-reference/#Protocols

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