2016-05-04 17 views
-2

ich von NSMutableDictionary, einige Daten zu erhalten versuchtWie bekomme ich ein Objekt von NSMutableDictionary?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    long time = (long)[[tempPosts allKeys] objectAtIndex:section]; 
    return [[tempPosts objectForKey:[[NSNumber numberWithLong:time] stringValue]] count]; 
} 

Aber das gibt mir ein <nil>. enter image description here

+0

NSMutableDictionary müssen beide Schlüssel und Werte folgen eine NSObject. Was ist der genaue Objekttyp Ihres Schlüssels? Ist es wirklich eine Schnur? Wenn dies nicht der Fall ist, hilft Ihnen das Übergeben eines NSString nicht, den zugeordneten Wert abzurufen. –

+0

Ich denke, anstatt so viel Konvertierung zu tun, sollten Sie einfach verwenden, 'NSString * key = [[tempPosts allKeys] objectAtIndex: Abschnitt];' und dann '[[tempPosts objectForKey: key] count];' sehen, ob es funktioniert. – iphonic

+0

es Typ ist 'lang' – codebot

Antwort

2

NSDictionaries sind nicht sortiert. allKeys gibt Schlüssel in zufälliger Reihenfolge zurück. Es gibt keine Garantie, dass es die gleiche Reihenfolge zweimal zurückgibt, so dass dieser Ansatz inhärent fehlerhaft ist. Und diese Zeile:

long time = (long)[[tempPosts allKeys] objectAtIndex:section]; 

ist absolut völlig falsch. Sie wählen einen der Schlüssel des Wörterbuchs aus, der ein Zeiger auf ein Objekt ist, am ehesten wie ein NSString *. Sie werfen dies zu lang - aber eine Adresse eines NSObject zu lange zu übertragen, gibt Ihnen nur sinnlose Bits.

Ich schlage vor, Sie beschreiben, was Sie eigentlich wollen.

Und NSDictionary ist völlig ungeeignet für Ihr Datenmodell, wie Sie vielleicht herausgefunden haben. Nehmen Sie das Wörterbuch und wandeln Sie es in ein Objekt um, das enthält, was Ihre Anwendung benötigt.

+0

Ich habe das erkannt. Dann änderte ich meinen Code und setzte das Objekt '[tempPosts setObject: postsArr forKey: @" 1461745812000 "];' und versuchte dann wie '[[tempPosts objectForKey: @" 1461745812000 "] count];'. Scheitert immer noch. – codebot

+0

Ich habe über diese Antwort nachgedacht und hier ist es! @Gänscher. +1. –

0

Die Umwandlung in long ist wahrscheinlich ein Fehler. Ihr Schlüssel ist wahrscheinlich ein NSNumber* oder ein NSString*. Wenn Sie es in eine long konvertieren möchten, müssen Sie den longValue erhalten. Casting es auf long wie Sie, wird nicht funktionieren.

0

Verwenden Sie diesen Code unten, und seine Arbeit für mich

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 

    NSLog(@"tempPosts %@",NSStringFromClass([tempPosts class])); 

    return [[[tempPosts objectForKey:[numberArray objectAtIndex:section]] allKeys] count]; 
} 

numberArray ist NSMutableArray Wert,

Ich habe auch gleiche Problem, dann den obigen Code ändern, hoffen seine hilfreich

0

verwenden Sie einfach dies. es wird die Nummer des Elements in Ihrem Wörterbuch zurückgeben.

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { 

return yourDictionary.count; 
} 

hoffe, es wird Ihnen helfen.

0

Die Objekte in NSMutableDictionary werden gespeichert und mit einem Schlüssel aufgerufen.

die NSMutableDictionary Einstellung

NSMutableDictionary * dictionary = [[NSMutableDictionary alloc]init]; 

in NSMutableDictionary Speichern z.B.

dictionary[@"someKey"] = @"someString"; 

das gespeicherte Element NSString Zugriff als

NSString * string = dictionary[@"someKey"]; 
Verwandte Themen