在MonoTouch和Objective C之间绑定NSArray

时间:2013-09-03 17:07:30

标签: xamarin.ios static-libraries

我创建了一个静态库并尝试使用link

将其绑定到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(“第1项”,“第2项”,“第3项”);

获得以下错误

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

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

1 个答案:

答案 0 :(得分:5)

绑定objective-c数组时有多种选择,例如:您可以使用NSArray而不是NSObject[]。我更喜欢后者,但两者都是有效的选择。

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

使用NSArray会使上述代码生效,因为它返回NSArray

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

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

以上将使用System.String数组。 stringNSObject之间没有直接转换。您可以将其重写为:

var b = new NSObject [] { new NSString ("Item 1"), new NSString ("Item 2"), new NSString ("Item 3") };

应该满足编译器和可能,如果没有看到它就无法确定,是您的原生API想要的。

注意:如果原生 API接受NSString数组,那么您可以将其绑定为NSString[]