2012-06-19 9 views
6

Sorununeden IBOutlet ARC altında piyasaya sürülüyor? Bunu kullanmak için bir şans var önce

Bir IBOutlet yayınlandı.

Ben

ister Ne yüzden bir tablo görünümüne yeniden yükleyebilirsiniz benim app temsilci bir gezinti kontrol erişmek istiyorum.

My Kur

Ben: my app temsilci üzerinde Ivar gibi gezinme kontrolöre hedef ayarlarında benim ana arayüz olarak

  • Bir IBOutlet ayarlanır

    • A Main.xib
    • Bu IBOutlet, Main.xib
    • Uygulama Gezgini'nde doğru gezinme denetleyicisine bağlanır. E xib ancak Dosyanın Sahibi olarak ayarlanmış
    Ben ARC, Xcode 4.3.2 ve iOS5.1 kullanıyorum

    ne denedim

    • değiştirme dağıtım hedef
    • navigasyon kontrolörü için dealloc üzerinde, uygulama temsilci bir kırılma noktası koymak - onlar ARC ve IBOutlets bulabilirsiniz şeyi Okuma
    • aramadı konum - hiçbir şey devam için görünüyor Aynı sorunu

    Kod

    KPAppDelegate.h

    @interface KPAppDelegate : UIResponder <UIApplicationDelegate> { 
        IBOutlet KPBrowseExpensesNavigationController *nc; 
    } 
    
    @property (strong) IBOutlet KPBrowseExpensesNavigationController *nc; 
    
    tam bkz - Ben gerekli sadece minimum sınıfları ile taze bir projeyi oluşturma
  • ne yapıyorum radict

    KPAppDelegate.m

    @implementation KPAppDelegate 
    
    @synthesize nc; 
    
    -(void)setNc:(KPBrowseExpensesNavigationController *)nc_ { 
        nc = nc_; // This gets called on view load and nc gets set. 
    } 
    
    ...snip... 
    
    // This is called about 5 seconds after app startup 
    -(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { 
         // By the time we get here, nc is nil. 
         UITableViewController *tvc = [[nc viewControllers] objectAtIndex:0]; 
         [[tvc tableView] reloadData]; 
    } 
    
    @end 
    

    ben burada gerçekten saçma şeyler yapıyor olmalı

    GÜNCELLEME. Hatta inanılmaz basit proje hala bu sorunu gösterir. Aşağıdaki bağlantıya bakınız.

    Download a simple test project that shows the problem.

  • +1

    Çok iyi bir soru örneği –

    cevap

    2

    Pencere ucunda, FilesOwner Sınıfını UIApplication olarak ayarlayın ve ardından Outlets'ten AppDelegate nesnesine temsilci atayın. Proje örneğinizde yanlış olan budur.

    +0

    Siz, efendim, çok zekice, bu benim için gerçekleşti, ama temsilci idam edilmeye başladığından beri Bu sorun olmaz diye düşündüm ... Keşke bunu 5 saat önce denedim ... Tekrar teşekkürler: –

    +0

    sorun değil, bir projede bu kodların bir satırından daha kolay anlamanız daha kolay. bir proje örneği ile açıklayarak çok iyi oldu :) –

    1

    Ben bir mülkte & olmayan bir özellik olarak ilan neden emin değilim.Böyle bir şey yapmalıdır:

    @interface KPAppDelegate : UIResponder <UIApplicationDelegate> 
    
    @property (nonatomic, strong) IBOutlet KPBrowseExpensesNavigationController *nc; 
    

    Ve uygulanmasında:

    @implementation KPAppDelegate 
    
    @synthesize nc = _nc; // So you don't accidentally use nc 
    
    ...snip... 
    
    // This is called about 5 seconds after app startup 
    -(void)objectLoader:(RKObjectLoader *)objectLoader didLoadObjects:(NSArray *)objects { 
         // By the time we get here, nc is nil. 
         UITableViewController *tvc = [[**self.nc** viewControllers] objectAtIndex:0]; 
         [[tvc tableView] reloadData]; 
    } 
    
    @end 
    

    Umut bu yardımcı olur! KPBrowseExpensesNavigationController türü olarak ayarladığınız Arayüz Oluşturucu'dan

    +0

    Teşekkürler, ama hala sıfır. :(Açıkça yanlış anlaşılınca @property bunu temizlediğiniz için teşekkürler. –

    2

    sizin çıkışınız mı? Değilse, nib ve ViewController arasındaki bağlantı oluşturmayacak. Size nav denetleyicisi alloc nerede görmedim Kimlik Müfettiş

    +0

    Yup. Bitti ama öneri için teşekkürler. –

    +0

    ve hala çalışmıyor? –

    +0

    Hala çalışmıyor ... Çıkış/ivar hala sıfırdır. Problemi gösteren ultra basit bir proje: –

    1

    yılında KPBrowseExpensesNavigationController olarak Custom Class belirlesin

    . Sadece mülkün bildirilmesi ona herhangi bir değer vermez, bu yüzden sıfır olur. Uygulama temsilcisindeki -didFinishLaunchingWithOptions numaralı ortamda, tahsis/init ifadenizi ayarlayın. Her şey iyi görünüyor. Özel bir init varsa

    KPBrowseExpensesNavigationController *nc = [[KPBrowseExpensesNavigationController alloc] init]; 
    

    , bunu da kullanabilirsiniz, ancak sadece denemek ve kullanmak önce kurmak emin olun.

    +0

    Kontrolör nib dosyasında başlatıldı.Ancak öneri için teşekkürler! –