2011-01-05 20 views
1

ich habe eine NSDictionary, die im Wert enthalten, und ich brauche diesen Wert zu erhalten i versucht haben, den Wert mit dem folgenden Code zu erhalten:konvertieren NSDictionary Wert NSInteger

[NSTimer scheduledTimerWithTimeInterval:0.01 
         target:self 
           selector:@selector(timerMovelabel:) 
           userInfo: 
      [NSDictionary dictionaryWithObject:var forKey:@"var1"] 
    , [NSMutableDictionary dictionaryWithObject:[NSNumber numberWithInt:23] forKey:@"var2"] 

ich versucht habe, den Wert zu erhalten mit den folgenden Methoden

  1. int intvar = [[[timer userInfo] objectForKey:@"var2"] intValue];

  2. NSNumber *numbervar = [[timer userInfo] objectForKey:@"var2"]; NSInteger intvar = [num intValue];

  3. folgt:

    [self method:[[[timer userInfo] objectForKey:@"var2"] intValue]]; 
    
    
    - (void)timerMovelabel:(NSTimer *)timer { 
        //here i execute one of the steps 1,2 and 3 but i didn't get any result all values are null 
    } 
    
    
    - (void) method:(NSInteger)dir 
    { 
        NSLog(@"%d",dir); 
    } 
    
+0

Bitte formatieren Sie den Code mit den mitgelieferten Editor-Tools, da er sonst sehr schwer zu lesen ist. –

+0

Bitte beschreiben Sie, wo sich dieses Verhalten nicht so verhält, wie Sie es erwarten und welche Warnungen oder Fehler Sie sehen. Es sieht so aus, als ob Sie versuchen, eine kommagetrennte Liste von Wörterbüchern als Ihr 'userInfo'-Argument zu übergeben, und das macht keinen Sinn. Zeigen Sie uns den Code, den Sie tatsächlich verwenden, nicht nur Linien außerhalb des Kontexts auswählen. – Jonah

+1

Sie vermissen den Parameter 'repeats' in der Klassenmethode' NSTimer'. –

Antwort

2

Der Aufbau des Timers erscheint falsch. Sie können nicht mehr als ein Wörterbuch an den userInfo-Parameter übergeben.

Versuchen:

[NSTimer scheduledTimerWithTimeInterval:0.01 
           target:self 
           selector:@selector(timerMovelabel:) 
           userInfo: 
     [NSDictionary dictionaryWithObjectsAndKeys: var, @"var1", 
                [NSNumber numberWithInt:23], @"var2", 
                nil] 
           repeats:NO]; 

EDIT: Added wiederholt Parameter, dank Bavarious.

+0

Sie vermissen den Parameter 'repeats' in der Klassenmethode' NSTimer'. –

+0

nette Arbeit BVC. vielen Dank. aber ich habe 1 Frage, was ist das Gefängnis für die Verwendung der Wiederholungen Parameter? Was ist der Unterschied zwischen Wiederholungen: JA und wiederholt: NEIN ?? –

+0

Wenn Wiederholungen NEIN ist, wird der Timer beim ersten Auslösen automatisch ungültig, andernfalls wird er mit dem angegebenen Zeitintervall wiederholt. – BVC

1

Ihre userInfo ist nicht korrekt erstellt. Sie müssen nur ein Objekt dort hineinreichen.

[NSTimer scheduledTimerWithTimeInterval:0.01 
         target:self 
           selector:@selector(timerMovelabel:) 
           userInfo: 
    [NSDictionary dictionaryWithObject:[NSNumber numberWithInt:23] forKey:@"var2"] 
     repeats:NO]; 

EDIT: forKeys: Wenn Sie ein Wörterbuch mit mehreren Schlüsseln und Werten weitergeben möchten, dann können Sie es mit dictionaryWithObjects tun.

Moszi

+1

Sein ursprünglicher Code gibt zwei Objekte im Wörterbuch an, nicht nur eines. Außerdem gibt es keinen Grund, 'NSMutableDictionary' zu verwenden, es sei denn,' timerMovelabel: 'ändert das Wörterbuch. –

+0

Vereinbaren Sie mit NSMutableDictionary. Aktualisiert. Und Notiz für dictionaryWithObjects hinzugefügt: forKeys:. – Moszi

Verwandte Themen