Xamarin 绑定对象 c 库问题

本文关键字:问题 对象 绑定 Xamarin | 更新日期: 2023-09-27 18:37:07

我要绑定该库

https://github.com/Appsido/AOTag?source=cc

静态库 它由开发人员提供。我生成的绑定项目和 API 定义是

using System.Drawing;
using System;
using MonoTouch.ObjCRuntime;
using MonoTouch.UIKit;
using MonoTouch.Foundation;
namespace AOTTagBinding {
    [BaseType (typeof (NSObject))]
    public partial interface EGOImageLoader {
        [Static, Export ("SharedImageLoader")]
        EGOImageLoader SharedImageLoader { get; }
        [Export ("IsLoadingImageURL")]
        bool IsLoadingImageURL (NSUrl aURL);
        [Export ("LoadImageForURL")]
        void LoadImageForURL (NSUrl aURL, EGOImageLoaderObserver observer);
        [Export ("ImageForURL")]
        UIImage ImageForURL (NSUrl aURL, EGOImageLoaderObserver observer);
        [Export ("RemoveObserver")]
        void RemoveObserver (EGOImageLoaderObserver observer);
        [Export ("RemoveObserver")]
        void RemoveObserver (EGOImageLoaderObserver observer, NSUrl aURL);
        [Export ("HasLoadedImageURL")]
        bool HasLoadedImageURL (NSUrl aURL);
        [Export ("CancelLoadForURL")]
        void CancelLoadForURL (NSUrl aURL);
        [Export ("ClearCacheForURL")]
        void ClearCacheForURL (NSUrl aURL);
        [Export ("ClearCacheForURL")]
        void ClearCacheForURL (NSUrl aURL, string style);
        [Export ("currentConnections", ArgumentSemantic.Retain)]
        NSDictionary CurrentConnections { get; set; }
    }
    [BaseType (typeof (NSObject))]
    [Model]
    public partial interface EGOImageLoaderObserver {
        [Export ("ImageLoaderDidLoad")]
        void ImageLoaderDidLoad (NSNotification notification);
        [Export ("ImageLoaderDidFailToLoad")]
        void ImageLoaderDidFailToLoad (NSNotification notification);
    }
    [BaseType (typeof (UIImageView))]
    public partial interface EGOImageView : EGOImageLoaderObserver {
        [Export ("InitWithPlaceholderImage")]
        IntPtr Constructor (UIImage anImage);
        [Export ("InitWithPlaceholderImage")]
        IntPtr Constructor (UIImage anImage, EGOImageViewDelegate aDelegate);
        [Export ("CancelImageLoad")]
        void CancelImageLoad ();
        [Export ("imageURL", ArgumentSemantic.Retain)]
        NSUrl ImageURL { get; set; }
        [Export ("placeholderImage", ArgumentSemantic.Retain)]
        UIImage PlaceholderImage { get; set; }
        [Export ("delegate", ArgumentSemantic.Assign)]
        EGOImageViewDelegate Delegate { get; set; }
    }
    [Model, BaseType (typeof (NSObject))]
    public partial interface EGOImageViewDelegate {
        [Export ("ImageViewLoadedImage")]
        void ImageViewLoadedImage (EGOImageView imageView);
        [Export ("ImageViewFailedToLoadImage")]
        void ImageViewFailedToLoadImage (EGOImageView imageView, NSError error);
    }
    [BaseType (typeof (NSObject))]
    [Model]
    public partial interface AOTagDelegate {
        [Export ("TagDistantImageDidLoad")]
        void TagDistantImageDidLoad (AOTag tag);
        [Export ("TagDistantImageDidFailLoad")]
        void TagDistantImageDidFailLoad (AOTag tag, NSError error);
        [Export ("TagDidAddTag")]
        void TagDidAddTag (AOTag tag);
        [Export ("TagDidRemoveTag")]
        void TagDidRemoveTag (AOTag tag);
        [Export ("TagDidSelectTag")]
        void TagDidSelectTag (AOTag tag);
    }
    [BaseType (typeof (UIView))]
    public partial interface AOTagList {
        [Export ("delegate", ArgumentSemantic.Assign)]
        AOTagDelegate Delegate { get; set; }
        [Export ("tags", ArgumentSemantic.Retain)]
        NSMutableArray Tags { get; set; }
        [Export ("AddTag")]
        void AddTag (string tTitle, string tImage);
        [Export ("AddTag")]
        void AddTag (string tTitle, string tImage, UIColor labelColor, UIColor backgroundColor, UIColor closeColor);
        [Export ("AddTag")]
        void AddTag (string tTitle, NSUrl imageURL, string tPlaceholderImage);
        [Export ("AddTag")]
        void AddTag (string tTitle, string tPlaceholderImage, NSUrl imageURL, UIColor labelColor, UIColor backgroundColor, UIColor closeColor);
        [Export ("AddTags")]
        void AddTags (NSObject [] tags);
        [Export ("RemoveTag")]
        void RemoveTag (AOTag tag);
        [Export ("RemoveAllTag")]
        void RemoveAllTag ();
    }
    [BaseType (typeof (UIView))]
    public partial interface AOTag : EGOImageViewDelegate {
        [Export ("delegate", ArgumentSemantic.Assign)]
        AOTagDelegate Delegate { get; set; }
        [Export ("tLabelColor", ArgumentSemantic.Retain)]
        UIColor TLabelColor { get; set; }
        [Export ("tBackgroundColor", ArgumentSemantic.Retain)]
        UIColor TBackgroundColor { get; set; }
        [Export ("tCloseButtonColor", ArgumentSemantic.Retain)]
        UIColor TCloseButtonColor { get; set; }
        [Export ("tImage", ArgumentSemantic.Retain)]
        UIImage TImage { get; set; }
        [Export ("tImageURL", ArgumentSemantic.Retain)]
        EGOImageView TImageURL { get; set; }
        [Export ("tTitle", ArgumentSemantic.Copy)]
        string TTitle { get; set; }
        [Export ("tURL", ArgumentSemantic.Retain)]
        NSUrl TURL { get; set; }
        [Export ("GetTagSize")]
        SizeF GetTagSize { get; }
    }
    [BaseType (typeof (UIView))]
    public partial interface AOTagCloseButton {
        [Export ("cColor", ArgumentSemantic.Retain)]
        UIColor CColor { get; set; }
        [Export ("InitWithFrame")]
        IntPtr Constructor (RectangleF frame, UIColor color);
    }
}

并建造精美。我已将我的AOTDelegate创建为:

using System;
using AOTTagBinding;
using MonoTouch.UIKit;
using MonoTouch.ObjCRuntime;
using MonoTouch.Foundation; 
namespace MyPorject
{
    public class TagDelegate: AOTagDelegate
    {
        public TagDelegate(){
        }
        public override void TagDistantImageDidLoad (AOTag tag){
        }
        public override void TagDistantImageDidFailLoad (AOTag tag, NSError error){
        }
        public override void TagDidAddTag (AOTag tag){
        }
        public override void TagDidRemoveTag (AOTag tag){
        }
        public override void TagDidSelectTag (AOTag tag){
        }
    }
}

最后,我以这种方式在我的视图控制器中使用了

AOTagList tags = new AOTagList();
            tags.Frame = new RectangleF(0.0f,
                                        50.0f,
                                        320.0f,
                                        300.0f);
            TagDelegate deleg = new TagDelegate();
            tags.Delegate = deleg;
            tags.RemoveAllTag ();
            tags.Tags = new NSMutableArray ();
            this.View.AddSubview(tags);

但是当我调用 RemoveAllTag() 时有这个例外

Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: -[AOTagList RemoveAllTag]: unrecognized selector sent to instance 0x7e61d740

更新作为响应,我对 API 进行了这样的更新

[BaseType (typeof (UIView))]
public partial interface AOTagList {
    [Export ("delegate", ArgumentSemantic.Assign)]
    AOTagDelegate Delegate { get; set; }
    [Export ("tags", ArgumentSemantic.Retain)]
    NSMutableArray Tags { get; set; }
    [Export("addTag:withImage:")]
    void AddTag (string tTitle, string tImage);
    [Export ("addTag")]
    void AddTag (string tTitle, string tImage, UIColor labelColor, UIColor backgroundColor, UIColor closeColor);
    [Export ("addTag")]
    void AddTag (string tTitle, NSUrl imageURL, string tPlaceholderImage);
    [Export ("addTag")]
    void AddTag (string tTitle, string tPlaceholderImage, NSUrl imageURL, UIColor labelColor, UIColor backgroundColor, UIColor closeColor);
    [Export ("addTags")]
    void AddTags (NSObject [] tags);
    [Export ("removeTag")]
    void RemoveTag (AOTag tag);
    [Export ("removeAllTag")]
    void RemoveAllTag ();
}

Xamarin 绑定对象 c 库问题

绑定生成器(Objective Sharpie)有一个错误,它没有输出正确的选择器。

这意味着 [导出] 属性中的所有字符串常量都是错误的。

对于 RemoveAllTag 方法,这很可能是它应该说的:

[Export ("removeAllTag")]
void RemoveAllTag ();

请注意选择器名称中的小写"R"。