调用绑定方法时无法识别的选择器

时间:2014-09-27 13:55:24

标签: c# ios binding xamarin.ios xamarin

我正在尝试将我创建的基本Objective-C库绑定到Xamarin项目。 .h文件是:

#import <Foundation/Foundation.h>
@import UIKit;

@interface StarIOFunctions : NSObject {

}

+ (NSMutableData *)GetDataToSendToPrinter:(UIImage *)image;

@end

我尝试使用以下ApiDefinition创建我的绑定:

using System;
using System.Drawing;

using MonoTouch.ObjCRuntime;
using MonoTouch.Foundation;
using MonoTouch.UIKit;
namespace BindingTake2
{
    [BaseType (typeof (NSObject))]
    interface StarIOFunctions {
        [Export ("GetDataToSendToPrinter:image")]
        NSMutableData GetDataToSendToPrinter (UIImage image);
    }
}

所有内容都会编译,但是当我在我的应用程序中运行它时:

UIImage image = UIImage.FromBundle("image1.png");
StarIOFunctions functions = new StarIOFunctions ();
var output = functions.GetDataToSendToPrinter (image);

我的应用程序因以下错误而崩溃:

Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: -[StarIOFunctions GetDataToSendToPrinter:image]: unrecognized selector sent to instance 0x7cdb50f0

现在,我认为它与我发送图像有关,而不是指向图像的指针 - 但我完全迷失了,无法弄清楚我到底做错了什么。

1 个答案:

答案 0 :(得分:2)

您似乎在选择器名称中包含参数名称,即

[Export ("GetDataToSendToPrinter:image")]

应该是:

[Export ("GetDataToSendToPrinter:")]

最后一栏&#39;:&#39;表示需要一个参数 - 但是你不需要为它命名(在选择器中),因为前面的字符串应该暗示它。