2016-05-05 4 views
2

Ich weiß, es gibt eine Menge Fragen wie diese, aber ich denke, meine Situation ist ein bisschen anders.Erwartete Methode zum Lesen des Array-Elements nicht gefunden auf Objekt vom Typ NSDictionary *

int i = 0; 
    while (_data[@"VerticalState%i", i] != nil) { 
     // do things 
     i++; 
    } 

Zum Beispiel ist eine 'Ebene', die 3 VerticalState Eigenschaften hat als solche umgesetzt werden: VerticalState0, VerticalState1, VerticalState2.

Ich möchte in diese Werte mit dieser While-Schleife Bedingung lesen, und es sollte aufhören, wenn i = 3. Wie kann ich die Idee von diesem Code oben arbeiten (mit einer anderen Konfiguration offensichtlich). FYI, _data ist eine NSDictionary* Instanzvariable, die bereits mit der PLIST-Information geladen wurde.

Antwort

2

Sie scheinen einen Wörterbuchschlüssel aus einem Zeichenfolgenformat erstellen zu wollen. Sie müssen NSString stringWithFormat: verwenden.

while (_data[[NSString stringWithFormat:@"VerticalState%i", i]] != nil) { 

Obwohl es besser wäre, die Schleife wie folgt zu schreiben:

int i = 0; 
while (1) { 
    NSString *key = [NSString stringWithFormat:@"VerticalState%i", i]; 
    id value = _dict[key]; 
    if (value) { 
     // do things 
     i++; 
    } else { 
     break; 
    } 
} 
+0

Warum die unten Abstimmung? Möchten Sie erklären, was Sie für falsch halten? – rmaddy

+0

Ich habe nicht abgelehnt ... weiß nicht wer es getan hat. Aber was du geschrieben hast, löste das Problem. Und das wird gut sein, um in Plist-Eigenschaften zu lesen? Der Schlüssel ist "VerticalState% i". – Frank

+0

Ja, der Code in meiner Antwort durchläuft Ihr Wörterbuch nach den Schlüsseln 'VerticalState0',' VerticalState1' usw. bis der Schlüssel nicht gefunden wird. – rmaddy