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

  • bobinire

    bobinire

    24 EYLÜL 2006
  • ipsy

    ipsy

    1 EKİM 2012
  • KarnasCamillo

    KarnasCamill

    24 EKİM 2007