ich habe ein NSDictionary
, das wie folgt aussieht:
{
"Item1" = 2.4;
"Item2" = 5.5;
"Item3" = 15.6;
}
Um diese NSDictionary
Elemente in einer Tabellenansicht zu verwenden, muss ich sie auf ein NSArray
übertragen, stimmt das?
Also versuche ich:
NSDictionary *dict = [myDict objectForKey:@"items"];
for (id item in dict) {
[_myArray addObject:[dict objectForKey:item]];
}
Aber _myArray bleibt leer? Was mache ich falsch?
Abgesehen von den technischen Problemen mit dem von Ihnen geposteten Code haben Sie Folgendes gefragt:
Um diese Dictionary-Elemente in einer Tabellenansicht zu verwenden, muss ich sie auf ein NSArray übertragen, oder?
Die Antwort lautet: nicht unbedingt. Der Maschinerie von UITableView
, UITableViewDataSource
oder UITableViewDelegate
ist nichts eigen, was bedeutet, dass Ihre Daten müssen in einem Array sind. Sie müssen verschiedene Methoden implementieren, um dem System mitzuteilen, wie viele Zeilen sich in Ihrer Tabelle befinden und welche Daten in jeder Zeile angezeigt werden. Viele Menschen finden es viel natürlicher und effizienter, diese Fragen mit einer geordneten Datenstruktur wie einem Array zu beantworten. Aber es gibt keine Voraussetzung dass Sie dies tun. Wenn Sie den Code zum Implementieren dieser Methoden mit dem Wörterbuch schreiben können, mit dem Sie begonnen haben, fühlen Sie sich frei!
NSArray * values = [dictionary allValues];
NSArray *keys = [dictionary allKeys];
NSArray *values = [dictionary allValues];
Sie können ein Array aller Objekte im Wörterbuch erstellen und es dann als Datenquelle für die TableView verwenden.
NSArray *aValuesArray = [yourDict allValues];
Code Snippet1:
NSMutableArray *array = [[NSMutableArray alloc] init];
NSArray * values = [dictionary allValues];
[array addObject:values];
Code Snippet2: Wenn Sie weitere hinzufügen möchten
[array addObject:value1];
[array addObject:value2];
[array addObject:value3];
Und so weiter
Sie können auch Schlüsselwerte des Wörterbuchs im Array speichern
NSArray *keys = [dictionary allKeys];
Es gibt ein paar Dinge, die hier passieren könnten.
Ist das von Ihnen aufgeführte Wörterbuch das myDict
? Wenn ja, dann haben Sie kein Objekt mit dem Schlüssel @"items"
und die Variable dict
sind Null. Sie müssen myDict
direkt durchlaufen.
Eine andere Sache zu überprüfen ist, ob _myArray
ist eine gültige Instanz eines NSMutableArray. Wenn es Null ist, ist das addObject:
Methode wird im Hintergrund fehlschlagen.
Als letztes muss überprüft werden, ob die Objekte in Ihrem Wörterbuch ordnungsgemäß in NSNumbers (oder einem anderen nicht-primitiven Typ) eingeschlossen sind.
+ (NSArray *)getArrayListFromDictionary:(NSDictionary *)dictMain paramName:(NSString *)paramName
{
if([dictMain isKindOfClass:[NSDictionary class]])
{
if ([dictMain objectForKey:paramName])
{
if ([[dictMain objectForKey:paramName] isKindOfClass:[NSArray class]])
{
NSArray *dataArray = [dictMain objectForKey:paramName];
return dataArray;
}
}
}
return [[NSArray alloc] init];
}
Hoffe das hilft!
Sie müssen nur Ihr NSMutableArray initialisieren
NSMutableArray *myArray = [[NSMutableArray alloc] init];
Dieser Code wird tatsächlich verwendet, um Werte zu dictionary
und through
den Daten zu einem Array
gemäß Key
hinzuzufügen.
NSMutableArray *arr = [[NSMutableArray alloc]init];
NSDictionary *dicto = [[NSMutableDictionary alloc]initWithObjectsAndKeys:@"Hello",@"StackOverFlow",@"Key1",@"StackExchange",@"Key2", nil];
NSLog(@"The dictonary is = %@", dicto);
arr = [dicto valueForKey:@"Key1"];
NSLog(@"The array is = %@", arr);
Um alle Objekte in einem Wörterbuch zu erhalten, können Sie auch enumerateKeysAndObjectsUsingBlock:
wie so:
NSMutableArray *yourArray = [NSMutableArray arrayWithCapacity:6];
[yourDict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[yourArray addObject:obj];
}];
In Swift 4:
let dict = ["Item1":2.4, "Item2": 5.4, "Item3" : 6.5]
let array = Array(dict.values)