2010-06-08 10 views
16

Evrensel uygulamamda sorun yaşıyorum. Temel SDK'yı iPhone 3.2'ye ayarladı ve hedefi 3,1 olarak ayarladım.

UIPopoverController'ı kullanan dosyaları kendi dosyalarına taşıdım ve uygulamayı iPhone'a yüklerken yüklenmemeleri gerekiyor.

dyld: Sembol bulunamadı: Uygulamamı inşa ederken oluşturmak ve benim cihaza ayıklama zaman Yine aşağıdaki hatayı alıyorum _OBJC_CLASS _ $ _ UIPopoverController gelen Başvurulan: /var/mobile/Applications/B3B90643 -92DC-4E5C-8B2F-83A42D6D57E0/citybikes.app/Beklenen bisikletleri : /var/mobile/Applications/B3B90643-92DC-4E5C-8B2F-83A42D6D57E0 içinde /System/Library/Frameworks/UIKit.framework/UIKit /citybikes.app/citybikes

Gerçekten umuyorum Birisi bana yardım edebilir.

Saygılarımızla, Paul Peelen onlar zamanında yüklenen olmasanız bile

cevap

27

, bu dosyalar halen bağlama işlenir. Bu nedenle _OBJC_CLASS_$_UIPopoverController sembolü, uygulamanıza dinamik bağlantı gerektirenlerden biri olarak eklenir.

2 çözümler,

  1. NSClassFromString(@"UIPopoverController"), veya
  2. yapabilir UIKit zayıf bağlı olan bir mesaj (örneğin, [UIPopoverController alloc]) içerisinde UIPopoverController tüm görünüm yerine bulunmaktadır.
+0

Cevabınız için teşekkür ederiz. "UIKit'i zayıf bağlanmış" ile ne demek istiyorsun? İlk bakışta mantık görünüyor ama en iyisi benim kodumu değiştirmek değil, ama ben bunu görmüyorum :(. /Paul –

+0

Ayrıca, nasıl ilk seçeneği nasıl @interface bölümünde çalışın. eklemek ve bir "UIPopoverController * popoverController;" –

+0

@ Paul: Bu değiştirilmeye gerek yoktur. Sadece [...] 'içindekiler değiştirilmelidir. – kennytm

4

'u zayıf bir şekilde UIKit linkini kesinlikle tavsiye ederim. KennyTM ve ben yorumlarımızda bahsettiğimiz gibi, bu gelecek linker sorunlarını gizleyebilir ve çökmelere neden olabilir. Ayrıca, UIKit'in açıkça olmadığı zaman isteğe bağlı olduğunu söyleyen linker'i anlatmaktan da rahat değilim. Büyük hack.

Bunun yerine, başlatmak ve dolaylı kullanarak UIPopoverController çağrı NSClassFromString: Hâlâ bağlayıcı hataları varsa

Class popover = NSClassFromString(@"UIPopoverController"); 
if (nil != popover) 
{ 
    self.myPopover = [[popover alloc] initWithContentViewController:myContent]; 
} 

, kullandığınız UIPopoverController iletilerini aramak gerekebilir NSSelectorFromString:

taşınabilirlik için
Class popover = NSClassFromString(@"UIPopoverController"); 
if (nil != popover) 
{ 
    SEL myInit = NSSelectorFromString(@"initWithContentViewController:"); 
    self.myPopover = [[popover alloc] performSelector:myInit withObject:myContent]; 
} 

, ben tavsiye Bu uygulama ayrıntılarını işlemek için bir proxy nesnesi yazma.

+1

yaparsınız Bu en iyi yaklaşımdır. Bununla birlikte, kişisel olarak 'if ([UIPopoverControll class]! = Nil) {...}' yi kullanmayı seviyorum. – simonbs

İlgili konular