在MonoTouch和Objective C之间绑定NSArray

Use*_*382 1 static-libraries xamarin.ios

我创建了一个静态库,并尝试使用链接将其绑定到Monotouch

在绑定中,我想将NSArray从MonoTouch传递给Objective C.我在ApiDefinition.cs中定义它,如NSObject [] DataArray {get; 组; }

  • 当我尝试从MonoTouch传递字符串数组时

var b = new [] {"Item 1","Item 2","Item 3"};

得到以下错误

无法将类型'string []'隐式转换为MonoTouch.Foundation.NSObject []

  • 当我尝试从MonoTouch传递NSArray时

NSArray array1 = NSArray.FromObjects("Item 1","Item 2","Item 3");

得到以下错误

无法将MonoTouch.Foundation.NSArray类型隐式转换为MonoTouch.Foundation.NSObject []

如何将数组从MonotOuch传递到Objective C?

pou*_*pou 5

绑定一个objective-c数组时有多个选择,例如你可能已经用过NSArrayNSObject[].我更喜欢后者,但两者都是有效的选择.

NSArray array1 = NSArray.FromObjects ("Item 1", "Item 2", "Item 3");
Run Code Online (Sandbox Code Playgroud)

使用a NSArray会使上面的代码工作,因为它返回一个NSArray.

你选择了OTOH,NSObject[]所以你必须遵循你的决定,即使用一系列的NSObject

var b = new[] { "Item 1", "Item 2", "Item 3" };
Run Code Online (Sandbox Code Playgroud)

以上将使用一个数组System.String.string和之间没有直接的转换NSObject.您可以将其重写为:

var b = new NSObject [] { new NSString ("Item 1"), new NSString ("Item 2"), new NSString ("Item 3") };
Run Code Online (Sandbox Code Playgroud)

哪个应该满足编译器,并且很可能,如果没有看到它就不能确定,是你的原生API想要的.

注意:如果本 API接受一个数组,NSString那么您可以将它绑定为as NSString[].