SORU
6 Mart 2009, Cuma


Objective-C @protokolü için bir sınıf örneği dökme

Olabilir ya da tanımlanmış bir Protokole uygun olmayan bir nesne (bir UİViewController) var.

Eğer nesne Protokole uygun olup olmadığını belirlemek, güvenli bir şekilde yöntemini çağırın biliyorum:

if([self.myViewController conformsToProtocol:@protocol(MyProtocol)]) {
    [self.myViewController protocolMethod]; // <-- warning here
}

Ancak, böyle büyük mükafat bir uyarı gösterir:

warning 'UIViewController' may not respond to '-protocolMethod'

Bu uyarı önlemek için doğru yolu nedir? MyProtocol a sınıfı self.myViewController dökme gibi görünmüyorum.

CEVAP
26 Kasım 2010, Cuma


Bunu yapmak için doğru bir şekilde yapmak

if ([self.myViewController conformsToProtocol:@protocol(MyProtocol)])
{
        UIViewController <MyProtocol> *vc = (UIViewController <MyProtocol> *) self.myViewController;
        [vc protocolMethod];
}

UIViewController <MyProtocol> * tür atama için çeviren "vc bir UİViewController nesne uyan MyProtocol", oysa kullanarak id <MyProtocol> çevirir "vc bir nesnenin bilinmeyen bir sınıf uyan MyProtocol".

Bu şekilde derleyici size uygun tip kontrolü vc - derleyici sadece sana bir uyarı eğer herhangi bir yöntemi bu değil ilan ya UIViewController <MyProtocol> denir. id yalnızca nesnenin sınıf/tip dökme biliyor musun eğer bu durumlarda kullanılmalıdır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DanceOn

    DanceOn

    6 Mayıs 2006
  • Engadget

    Engadget

    18 EYLÜL 2006
  • LAHWF

    LAHWF

    5 Kasım 2009