我正在尝试将我创建的基本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
现在,我认为它与我发送图像有关,而不是指向图像的指针 - 但我完全迷失了,无法弄清楚我到底做错了什么。
答案 0 :(得分:2)
您似乎在选择器名称中包含参数名称,即
[Export ("GetDataToSendToPrinter:image")]
应该是:
[Export ("GetDataToSendToPrinter:")]
最后一栏&#39;:&#39;表示需要一个参数 - 但是你不需要为它命名(在选择器中),因为前面的字符串应该暗示它。