2010-11-06 24 views
5

içinde dizileri kullanmak için uygun yolu Ben şimdiye kadar oldukça serin olan MonoMac bir proje üzerinde çalışmaya başladı. Ama hala emin olmadığım bazı şeyler var. Örneğin: Dizileri nasıl kullanıyorsunuz? İşte bulduğum şey: NSArray'u çağırdığım bir yöntemden döndüğümde ve bu dizideki özel nesnelerden birini almaya çalıştığımda "cannot convert type System.IntPtr to MyType" gibi bir şey almaya devam ediyorum.MonoMac

NSArray groupArray = (NSArray)groupDictionary.ObjectForKey(key); 
MyType myObject = (MyType)groupArray.ValueAt(0); 

Diziler için geri döndüm. Ama ya kendi başıma bir dizi oluşturmak istersem? NSArray'ın uygulanması, onu başlatmamı sağlamaz. Ben MonoMac website hakkı var eğer Yani, sırasıyla bu

int[] intArray = int[10]; 

C# nasıl kullanılacağını farkında değilim bir kesinlikle yazılan dizi gibi sıradan bir dizi kullanmalısınız.

Buraya gitmek için yol nedir? Eğer yukarıda anlatılan sorunları ile sona çünkü

Teşekkür NSArray kullanarak Genelde -f

cevap

10


, çok kullanışlı değildir.

Bu yüzden, genel olarak NSArray'ı çok yazılan bir diziye dönüştürmelisiniz. MonoMac düşük seviyeli çalışma zamanı bunu sizin adınıza zaten tüm geri aramalar için yapar.

Genellikle bu yapardın: NSArray, sadece mağaza NSObjects can yüzden "YourType" NSObject türetilmiş bir nesne olması gerektiğini

YourType [] stronglyTyped = NSArray.ArrayFromHandle<YourType> (arrayIntPtrHandle); 

Not.

Eğer hala NSArray'ı kullanmak istiyorsanız, hatırlamanız gereken şey, ValueAt'ın C# ile kullanmak için temel nesne tutamacını (IntPtr) döndürmesidir. Bunu bir NSObject'e dönüştürmeniz gerekir. Sen Runtime.GetNSObject yöntemi ile bunu, en türetilmiş türüne sonucu yayınlayabilirsiniz:

YourType x = (YourType) Runtime.GetNSObject (NSArray.ValueAt (0)); 

bir Objective-C API erişmek için araçlarını bağlama API kullanıyorsanız, sen, söyleniyor şeyleri doğru bir şekilde bağlama. should yerine bu yüzden, bir NSArray kesinlikle yazılı sürümüne sahip olmalıdır sahip sözleşmeniz API:

[Export ("getElements")] 
NSArray GetElements(); 

gibi olmalı:

[Export ("getElements")] 
YourType [] GetElements(); 
+0

Teşekkür Miguel, hile yaptı! En iyi. – flohei