我刚刚开始使用 MonoMac 开发一个项目,到目前为止它非常棒。但还有一些事情我不确定。例如:你如何使用数组?这是我发现的:当我从正在调用的方法返回 NSArray
并尝试获取该数组中的自定义对象之一时,我不断收到类似“cannot convert将 System.IntPtr 键入 MyType
"。
NSArray groupArray = (NSArray)groupDictionary.ObjectForKey(key);
MyType myObject = (MyType)groupArray.ValueAt(0);
那是我返回的数组。但是如果我想自己创建一个数组呢? NSArray 的实现不允许我实例化它。所以如果我得到 MonoMac website对,我应该使用像这样的普通数组
int[] intArray = int[10];
分别是一个强类型数组,我不知道如何在 C# 中使用它。
那么去这里的路是什么?
谢谢
–f
最佳答案
一般来说,使用 NSArray 不是很有用,因为你最终会遇到上面描述的问题。
这就是为什么通常您应该将 NSArray 转换为强类型数组的原因。 MonoMac 低级运行时会代表您对所有回调执行此操作。
通常你会这样做:
YourType [] stronglyTyped = NSArray.ArrayFromHandle<YourType> (arrayIntPtrHandle);
请注意,NSArray 只能存储 NSObject,因此“YourType”需要是从 NSObject 派生的对象。
现在,如果您仍想使用 NSArray,您需要记住的是 ValueAt 返回底层对象句柄(IntPtr),要将其与 C# 一起使用,您需要将其转换为 NSObject。您使用 Runtime.GetNSObject 方法执行此操作,您可以将结果转换为最派生的类型:
YourType x = (YourType) Runtime.GetNSObject (NSArray.ValueAt (0));
也就是说,如果您使用 API 绑定(bind)工具来访问 Objective-C API,那么您就没有正确地绑定(bind)东西。您的契约(Contract) API 应该具有强类型版本,而不是 NSArray,因此:
[Export ("getElements")]
NSArray GetElements ();
应该变成:
[Export ("getElements")]
YourType [] GetElements ();
关于c# - 在 MonoMac 中使用数组的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4113513/