2017-10-12 1 views
0

enthält Ich habe ein NSMutableArray, das ein Objekt eines Klassenmodells in jeder Position wie diesem enthält. Das Klassenmodell enthält 2 Arten von Informationen, die wir anrufen werden ID und Name. So habe ich an jedem Ort meines NSMutableArray ein Objekt, das 2 Informationen enthält.Gruppenelement in NSMutableArray, das Objekt

Dann wird in der ersten Position meines NSMutableArray Ich habe

{ 
id = 1; 
name = "Dan"; //this is the first object in NSMutableArray 
} 

In der zweiten Position von NSMutableArray, die ich habe:

{ 
id = 1; 
name = "Luca"; 
} 

In der dritten Position

{ 
id = 2; 
name = "Tom"; 
} 

und so weiter ..

Ok, mein Ziel ist es, die Vereinigung von identischen IDs zwischen den verschiedenen Objekten innerhalb des SNMutableArray zu machen, aber es ist zu schwierig!

Zum Beispiel, wenn ich habe:

{ 
id = 1; 
name = "Tom"; 
} 

{ 
id = 1; 
name = "Luca"; 
} 

{ 
id = 2; 
name = "Steve"; 
} 

{ 
id = 2; 
name = "Jhon"; 
} 

{ 
id = 3; 
name = "Andrew"; 
} 

Das Ziel ist:

{ 
id = 1; 
name = "Tom"; 
name = "Luca"; 
} 
{ 
id = 2; 
name = "Steve"; 
name = "Jhon"; 

} 
{ 
id = 3; 
name = "Andrew"; 
} 

Irgendwelche Ideen? möchte dies in der cellForRowAtIndexPath Methode verwenden, und ich versuchte, dies zu schreiben: (cm ist mein Klassenmodell und myArray ist die NSMutableArray, die ein Objekt der cm-Klasse enthält)

ClassModel *cm = [myArray objectAtIndex:indexPath.row]; 


NSMutableArray * resultArray = [NSMutableArray new]; 
NSArray * groups = [array valueForKeyPath:cm.ID]; 
for (NSString * groupId in groups) 
{ 
     NSMutableDictionary * entry = [NSMutableDictionary new]; 
     [insert setObject: groupId forKey: @ "groupId"]; 

     NSArray * groupNames = [array filteredArrayUsingPredicate: [NSPredicate predicateWithFormat: @ "groupId =% @", groupId]]; 
     for (int i = 0; i <groupNames.count; i ++) 
     { 
         NSString * name = [[groupNames objectAtIndex: i] objectForKey: @ "name"]; 
         [entry setObject: name forKey: [NSS string stringWithFormat: @ "name% d", i + 1]]; 
     } 
     [resultArray addObject: entry]; 
} 

NSLog (@ "% @", resultArray); 

Aber dies nicht work..maybe weil jedes Element in meinem Array ein Objekt ist ?? .. Hilfe!

Antwort

0

Sie haben die richtige Grundidee, aber Sie sollten nicht versuchen, dies in cellForRowAt zu tun. Stattdessen müssen Sie ein neues Array mit den Daten in der erforderlichen Struktur erstellen und dieses Array als Quelle für Ihre Tabellenansicht verwenden. Sie müssen auch eine neue Klasse erstellen, die in das Array eingefügt wird. eine, die ein id und ein NSMutableArray für den Namen hat (ich werde dies nicht zeigen, aber ich werde nenne es GroupClassModel)

Verwendung so etwas wie:

NSMutableDictionary *groups = [NSMutableDictionary new] 
for (ClassModel *cm in array) { 
    GroupClassModel *gcm = groups[cm.id]; 
    if (gcm == nil) { 
     gcm = [GroupClassModel new]; 
     gcm.id = cm.id 
     groups[cm.id] = gcm 
    } 
    [gcm.names addObject:cm.name]; 
} 

NSArray *groupedName = [groups allValues]; 
// Finally, sort groupedName by id if that is required. 
+0

Danke für die Antwort! Ich habe nur eine Frage: Was ist 'GroupClassModel * gcm'? Ich verstehe nicht –

+0

Es ist eine neue Objektklasse, die Sie erstellen müssen, die ein Array für Namen anstelle einer einzelnen Zeichenfolge hat. – Paulw11

+0

Ok, jetzt verstehe ich! Letzte Frage, wenn ich ID durch eine Zeichenfolge für die Union ersetzen würde, funktioniert es trotzdem? Ich habe eine Warnung 'Instance-Methode '-add:' nicht gefunden (Rückgabetyp ist standardmäßig auf 'id')' –

Verwandte Themen