come faccio a passare un valore di tipo int, attraverso un metodo di selezione?

Voglio passare un int valore dal mio selettore di metodo, ma il metodo di selezione prende solo un parametro “tipo oggetto”.

int y =0;
[self performselector:@selector(tabledata:) withObject:y afterDelay:0.1];

Metodo di esecuzione è qui

-(int)tabledata:(int)cellnumber {
   NSLog(@"cellnumber: %@",cellnumber);
   idLabel.text = [NSString stringWithFormat:@"Order Id: %@",[[records objectAtIndex:cellnumber] objectAtIndex:0]];
}

ma non ricevo esatto valore intero nel mio metodo, io sono solo ottenendo il valore di id.

InformationsquelleAutor Emon | 2011-10-26

 

3 Replies
  1. 19

    La soluzione più semplice, se si ‘proprio’ il target di selezione, è quello di avvolgere l’argomento di tipo int in un NSNumber:

    -(int)tabledata:(NSNumber *)_cellnumber {
        int cellnumber = [_cellnumber intValue];
        ....
    }

    Chiamare questo metodo si usa:

    [self performselector:@selector(tabledata:) withObject:[NSNumber numberWithInt:y] afterDelay:0.1];
    • cellnumber stampa valore null in nslog.
    • scusa hai ragione il suo woking ora.grazie fratello
    • cellnumber non è un puntatore, così come può essere NULL? Ti riferisci alla _cellnumber? Inoltre, è possibile utilizzare “%d” per accedere valori interi, e “%@” per accedere NSNumber valori.
  2. 15

    Questo funziona anche per un int parametro, che è particolarmente utile, se non si riesce a cambiare la firma del selettore che si desidera eseguire.

    SEL sel = @selector(tabledata:);
    
    NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:sel];
    NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature];
    invocation.selector = sel;
    //note that the first argument has index 2!
    [invocation setArgument:&y atIndex:2];
    
    //with delay
    [invocation performSelector:@selector(invokeWithTarget:) withObject:self afterDelay:0.1];
  3. 1

    Invece di performSelector:withObject:afterDelay:, utilizzare un NSTimer, protettori così:

    int y = 0;
    [NSTimer scheduledTimerWithTimeInterval:0.1 repeats:NO block:^(NSTimer *timer) {
        [self tabledata:y];
    }];

    Si può passare quello che vuoi in blocco timer.

Lascia un commento