【问题标题】:Binding NSArray between MonoTouch and Objective C在 MonoTouch 和 Objective C 之间绑定 NSArray
【发布时间】:2013-09-03 17:07:29
【问题描述】:

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

在绑定中,我想将 NSArray 从 MonoTouch 传递到 Objective C。我在 ApiDefinition.cs 中定义了它,例如 NSObject [] 数据数组 { 获取;放; }

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

var b = new[] { "项目 1", "项目 2", "项目 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?

【问题讨论】:

    标签: xamarin.ios static-libraries


    【解决方案1】:

    绑定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 想要的。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多