SORU
18 Kasım 2008, Salı


Parametreleri ile bir yöntem adı bir seçici oluşturma

Geçerli nesne, SEL alır örnek bir kod var

SEL callback = @selector(mymethod:parameter2);

Ve bir yöntemi var

 -(void)mymethod:(id)v1 parameter2;(NSString*)v2 {
}

Şimdi başka bir nesneye mymethod taşımak için ihtiyacım var, söyle myDelegate.

Denedim:

SEL callback = @selector(myDelegate, mymethod:parameter2);

ama derleme değil.

CEVAP
18 Kasım 2008, Salı


SEL seçici olarak temsil eden bir tür Objective-C @(seçici) seni tanımlayan bir SEL anahtar kelime verir. Bir işlev işaretçisi değil ve herhangi bir nesne veya Kaynaklar geçemezsiniz. Seçici her değişken için (yöntem) @çağrı seçici temsil etmen gerekiyor. Örneğin:

-(void)methodWithNoArguments;
SEL noArgumentSelector = @selector(methodWithNoArguments);

-(void)methodWithOneArgument:(id)argument;
SEL oneArgumentSelector = @selector(methodWithOneArgument:); // notice the colon here

-(void)methodWIthTwoArguments:(id)argumentOne and:(id)argumentTwo;
SEL twoArgumentSelector = @selector(methodWithTwoArguments:and:); // notice the argument names are omitted

Seçiciler genellikle geri temsilci yöntemleri ve bir geri arama sırasında belirli bir nesne üzerinde adı belirtmek için geçirilir. Bir zamanlayıcı oluşturmak örneğin, geri arama yöntemi özel olarak tanımlanmış

-(void)someMethod:(NSTimer*)timer;

Ne zaman @seçici nesne aslında geri sorumlu olacağını belirtmek için kullanın zamanlayıcı zamanlama:

@implementation MyObject

-(void)myTimerCallback:(NSTimer*)timer
{
    // do some computations
    if( timerShouldEnd ) {
      [timer invalidate];
    }
}

@end

// ...

int main(int argc, const char **argv)
{
    // do setup stuff
    MyObject* obj = [[MyObject alloc] init];
    SEL mySelector = @selector(myTimerCallback:);
    [NSTimer scheduledTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES];
    // do some tear-down
    return 0;
}

Bu durumda nesne n her 30 saniyede bir myTimerCallback ile mesajla olmasını sağlarsınız.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • CodingMadeEasy

    CodingMadeEa

    25 EYLÜL 2010
  • Samantha Crain

    Samantha Cra

    30 EKİM 2008
  • stewmurray47

    stewmurray47

    1 Kasım 2006