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

  • gsipek

    gsipek

    20 Temmuz 2007
  • IGN

    IGN

    19 EYLÜL 2006
  • inovationgmbh

    inovationgmb

    28 EYLÜL 2010