SORU
16 EYLÜL 2012, Pazar


dismissModalViewControllerAnimated onaylanmamış

Sadece iPhone için 4 inç ekran üzerinde çalıştırmak için benim iOS app güncellemek için 4.5 Güncellemelerinden 5, ama kurmak bir hata satırında dismissModalViewControllerAnimated:' is deprecated diyerek alıyorum geliştirdim:

[self dismissModalViewControllerAnimated:NO];

Böyle bir tamamlanma işleyicisi ile önerilen aşırı (ama NULL olarak ayarlayın) için Güncelleştirme denedim:

[self dismissModalViewControllerAnimated:NO completion:NULL];

Ama sonra bu çizginin iki hata atar:

warning: 'TabBarController' may not respond to '-presentModalViewController:animated:completion:'
Instance method '-presentModalViewController:animated:completion:' not found (return type defaults to 'id')

Teşekkürler!

CEVAP
16 EYLÜL 2012, Pazar


Yeni bir yöntem:

[self dismissViewControllerAnimated:NO completion:nil];

Kelimekalıcızararlı API çağrısı için olduğu Gibi kaldırıldı;:

[self presentViewController:vc animated:NO completion:nil];

Nedenleri tartışıldı236 - View Evrimi Denetleyicileri iOS 2012 WWDC OturumVideo. Aslında, görünümü denetleyicileri bu API tarafından sunulan artık hep kalıcı ve tamamlanması işleyicisi ekleyerek bu yana, yeniden adlandırmak için iyi bir zamandı.

Yanıt olarak Marc yorum için:

Tüm cihazlar 4.3 ve üzeri desteklemek için en iyi yolu nedir? Yeni yöntem iOS4, henüz iOS6 ile yazıldı eski yöntem işe yaramıyor.

Fark ettim ki bu neredeyse ayrı bir soru, ama bence denemeye değer bir söz değil bu yana, herkes para için yükseltme tüm bu aygıtları her 3 yılda bir sürü bize biraz eski (pre 5.0) cihazlar. Yine de, bunu söylemek bana acı verse de, eğer 5.0 altında hedef değer olup olmadığını dikkate almak gerekir. Birçok yeni ve serin API 5.0 altında kullanılamaz. Ve Apple sürekli olarak daha zor bir hedef için; armv6 desteği böyle büyük mükafat bırakılır örneğin 4.5, yapıyor.

5.0 (tamamlanma blok nil olduğu sürece) aşağıda sadece kullanışlı respondsToSelector hedef: yöntem.

if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
    [self presentViewController:test animated:YES completion:nil];
} else {
    [self presentModalViewController:test animated:YES];
}

Marc: başka bir yorum yanıt olarak

Eğer başvurum açıklamalar! çok olabilir...Ben bu kod kapsüllü bir kategori oluşturmayı düşünüyorum, UİViewControler bir kategori oluşturma beni reddetti?

ve tek bir Düzgün: Tam

...bir el ile bir derleyici mevcut değil neden uyarı?

Birincisi, tek başına UIViewController bir kategori oluşturma uygulaması; o kategoriye özel API ya da ona benzer bir şey olarak adlandırılan bu yöntem sürece reddedilir.

Kategori bir yöntem bu kod için son derece iyi bir yerdir. İtiraz API, tek bir çağrı olacak beri ayrıca, sadece bir derleyici uyarı olurdu.

Tam doğru Dürüst yorum(soru) adresi, Evet derleyici uyarılarını el ile bastırmak. Here is a link to an answer on SO on that very subject. Kategori bir yöntem sadece tek bir yerde uyarı engelleniyor olduğun için de derleyici bir uyarı bastırmak için harika bir yerdir. Kesinlikle derleyici susturma etrafında istesekte istemesekte gitmek istemiyorum.

Eğer bu kategori için basit bir yöntem yazacak olsaydım, böyle bir şey olabilir:

@implementation UIViewController (NJ_ModalPresentation)
-(void)nj_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion{
    NSAssert(completion == nil, @"You called %@ with a non-nil completion. Don't do that!",NSStringFromSelector(_cmd));
    if ([self respondsToSelector:@selector(presentViewController:animated:completion:)]){
        [self presentViewController:viewControllerToPresent animated:flag completion:completion];
    } else {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
        [self presentModalViewController:viewControllerToPresent animated:flag];
#pragma clang diagnostic pop
    }
}
@end

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Blunty

    Blunty

    13 Mart 2006
  • kamaniusilelis

    kamaniusilel

    10 HAZİRAN 2011
  • THE RED DRAGON

    THE RED DRAG

    6 ŞUBAT 2009