flo*_*hei 6 c# arrays objective-c nsarray monomac
我刚刚开始在MonoMac上开展一个项目,到目前为止这个项目非常酷.但是还有一些我不确定的事情.例如:你如何使用数组?这是我发现的:当我NSArray从一个我正在调用的方法返回时,我尝试获取该数组中的一个自定义对象,我不断得到类似" cannot convert type System.IntPtr to MyType"的东西.
NSArray groupArray = (NSArray)groupDictionary.ObjectForKey(key);
MyType myObject = (MyType)groupArray.ValueAt(0);
Run Code Online (Sandbox Code Playgroud)
这是我回来的数组.但是,如果我想自己创建一个数组怎么办?NSArray的实现不允许我实例化它.所以如果我把MonoMac网站弄好了,我应该使用像这样的普通数组
int[] intArray = int[10];
Run Code Online (Sandbox Code Playgroud)
分别是一个强类型数组,我不知道如何在C#中使用它.
那么去这里的方式是什么?
谢谢
-f
mig*_*aza 11
通常,使用NSArray并不是很有用,因为您最终会遇到上述问题.
这就是为什么通常你应该将NSArray转换为强类型数组.MonoMac低级运行时为您代表的所有回调执行此操作.
通常你会这样做:
YourType [] stronglyTyped = NSArray.ArrayFromHandle<YourType> (arrayIntPtrHandle);
Run Code Online (Sandbox Code Playgroud)
请注意,NSArray只能存储NSObject,因此"YourType"需要是从NSObject派生的对象.
现在,如果您仍想使用NSArray,您需要记住的是ValueAt返回底层对象句柄(IntPtr),要将它与C#一起使用,您需要将其转换为NSObject.使用Runtime.GetNSObject方法执行此操作,可以将结果强制转换为派生类型最多的类型:
YourType x = (YourType) Runtime.GetNSObject (NSArray.ValueAt (0));
Run Code Online (Sandbox Code Playgroud)
话虽这么说,如果你使用API绑定工具来访问Objective-C API,你就没有正确绑定东西.您的合同API应该而不是NSArray应该具有强类型版本,因此:
[Export ("getElements")]
NSArray GetElements ();
Run Code Online (Sandbox Code Playgroud)
应该成为:
[Export ("getElements")]
YourType [] GetElements ();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1173 次 |
| 最近记录: |