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

  • engineerguy

    engineerguy

    10 Ocak 2010
  • KliptOut KwazeeKilla

    KliptOut Kwa

    24 ŞUBAT 2010
  • spyib

    spyib

    9 Ocak 2007