2016-07-29 8 views
0

von Objekten besteht Ich habe das Array, das aus Objekten besteht:Ziel-C. Zugang zu Eigentum von Element in Array, das

ViewController *item1 = [ViewController new]; 
item1.name = @"Mary"; 
item1.Description = @"good girl"; 
ViewController *item2 = [ViewController new]; 
item2.name = @"Daniel"; 
item2.Description = @"bad boy"; 
ComplexArray= [NSArray arrayWithObjects: item1, item2, nil];` 

i einen Namen in Etiketten anzeigen möchten, und Beschreibung, wenn Name

for (int i = 0; i < [ComplexArray count]; i++) { 
    if (item[i].name isEqualString:@"Mary") { 
     _nameLabel.text= item[i].name; 
     _DescriptionLabel.text= item[i].Description; 
    } 
} 
gleich Mary ist

Bitte helfen Sie mir

+0

Sie haben das ComplexArray [i] nicht in Ihrer Elementvariablen innerhalb der Schleife zugewiesen. Sie müssen ComplexArray [i] in Element zuweisen. Siehe meine Lösung. Warum verwenden Sie jedoch objektive -C und schnelle Syntax zusammen. Bitte seien Sie vorsichtig, Sie sollten versuchen, in einer Sprache zu programmieren. – Natasha

+0

@Natasha Es gibt keine 'Swift'-Syntax in den Codebeispielen. – Losiowaty

+0

@Losiowaty, soweit ich weiß, greifen wir nicht auf Elemente aus dem Array in Objective-C wie item [i] zu. Es sollte wie [item objectAtIndex: i] sein. Entschuldigen Sie, wenn ich falsch liege, aber ich habe das Dokument von Apple überprüft, und ich glaube, das ist keine objektive Aussage. Außerdem gibt es die Anweisung "ViewController * item1 = [ViewController new]", das scheint auch nicht richtig zu sein. Um einen ViewController zu initialisieren, müssen wir [[ViewController alloc] init] ausführen, es sei denn, diese Anweisung wird nicht initialisiert, scheint in Objective C nicht der richtige Weg zu sein. – Natasha

Antwort

0

Ihr Problem ist, dass Sie nichts in item Variable zugewiesen haben. Aktualisieren Sie einfach so und es wird funktionieren.

for (int i = 0; i < [ComplexArray count]; i++) { 
    ViewController *item = [ComplexArray objectAtIndex:i]; // you missed this line. 
    if ([item.name isEqualToString:@"Mary"]) { //you missed the opening "[" and closing "]" 
     _nameLabel.text= item.name; 
     _DescriptionLabel.text= item.Description; 
    } 
} 
+0

'item [i] .name ==" Mary "'? Nee. – Droppy

+0

@Droppy, ja du hast Recht. Ich nahm an, dass es schnell war. Jetzt habe ich die Antwort in Ziel C editiert. – Natasha

+2

besser zu verwenden 'für (ViewController * Element in ComplexArray) {', brauchen Sie nicht den Index – Sulthan

1

Sie hatten es im Grunde. Ich tat alles, war umbenennen item zu ComplexArray[] um den isEqualToString Anruf hinzugefügt und fügte ein break:

for (int i = 0; i < [ComplexArray count]; i++) { 
    ViewController *item = ComplexArray[i]; 
    if ([item.name isEqualString:@"Mary"]) { 
     _nameLabel.text= item.name; 
     _DescriptionLabel.text= item.Description; 
     break; // Added 
    } 
} 

Es gibt andere Möglichkeiten, aber dieser Ansatz ist in Ordnung.

BTW: Variablen sollten nach Konvention mit einem Kleinbuchstaben beginnen.

+0

Droppy, ich habe Fehler: Eigenschaft 'Name' nicht auf Objekt vom Typ 'ID' gefunden – Mario

+0

Wie ja; Sie müssen dem Compiler mitteilen, welches Objekt im Array enthalten ist. Lass mich meine Antwort korrigieren. – Droppy

+0

Es ist nur eine Frage der Kodierung Konvention, aber ich denke, es wäre besser, wenn wir eine Sprache in einem Projekt folgen, wenn wir nicht gemischt haben. Also, nur meinen Vorschlag, könnten Sie bearbeiten "ViewController * item = ComplexArray [i];" ViewController * Element = [ComplexArray ObjektAtIndex: i]; – Natasha

Verwandte Themen