2011-05-12 17 views
6

yapar. GetMethod yansıtma yönteminin bir sınıf için statik bir yöntem döndürmediği bir sorunla karşılaştım. Bu sadece gerçek bir iphone üzerinde yanlış gidiyor; simülatörde doğru çalışıyor.Yansıma yöntemi GetMethod, bir iphone'daki bir sınıfın statik yöntemini döndürmez, ancak simülatörde

MethodInfo methInfo = _type.GetMethod (methodName); 

ve

MethodInfo methInfo = _type.GetMethod (methodName, System.Reflection.BindingFlags.Static); 

fakat bunların hiçbiri methodName belirtilen yöntem döndürür: Aşağıdaki çalıştılar. Belirtilen yöntem, simülatörde çalıştığı gerçeği ile gösterilmektedir. Hata ayıklayıcı ile üye değişkeni _type'ın doğru sınıf tipi referansı içerdiğini doğruladım. Almaya çalıştığım yöntemler, sınıfta genel olarak bildirildi.

Daha önce bununla karşılaştı mı, yoksa bunun neden simülatörde çalışacağını, ancak gerçek iphone'da olmadığını biliyor mu?

+0

Simülatör ve gerçek telefon çok farklı. Bunun gibi farklılıklar yok eder. MonoTouch forumları muhtemelen daha iyi bir yer. –

+0

MonoTouch forumlarının buraya taşındığı izlenimi altındaydım; En azından MonoTouch forumlarında bu sene daha önceki bir mesaj vardı. – BruceHill

+0

MT ekibi SO'yi izler ve genellikle MT ile ilgili çoğu soruyu yanıtlar. – Jason

cevap

7

Yansıma, iOS'ta tam olarak çalışmayabilir olmasa da çalışır. Sorun, bağlantının cihaz konfigürasyonu üzerinde aktif hale getirilmesi ve kullanılmadığı için yöntemin kesilmesidir. Linker, yansıma çağrılarını "göremez". bir özel nesne ise

, PreserveAttribute ile süsleyin:

  1. tamamen bağlayıcı devre dışı bırakın:

    [Preserve(AllMembers=true)] 
    public class MyClass 
    {} 
    

    o SDK'dan bir nesne ise, iki seçeneğiniz vardır. Bu nihai boyut büyük olacağından iyi değil.

  2. Yöntemi doğrudan kodunuzda kullanın, böylece linker orada olduğunu bilecek ve şeritlemeyecektir.
+0

Teşekkürler, Dimitris. Bu cevapla karşınızdasın. Bağlayıcı gerçekten yöntemleri kaldırıyordu. Bahsettiğiniz _Preserve_ özniteliğini ekledim ve uygulamam artık iphone'da doğru şekilde çalışıyor. Teşekkürler! :) – BruceHill

+0

System.Reflection, iOS'ta sadece Mono tarafından desteklenen diğer herhangi bir mimariden/işletim sisteminden daha iyi çalışıyor. Desteklenmeyen, tamamen farklı bir canavar olan System.Reflection.Emit'dir. Aksi takdirde iyi tavsiyeler :) –

+0

iOS'ta System.Reflection ile ilgili bazı sorunlar var. Her yönüyle çalışmıyor, çoğu işe yaramıyor. –

İlgili konular