2016-10-12 4 views
0

Ich habe ein NSMutableDictionary mit einer bestimmten key und value. Dieses Wörterbuch befindet sich in einem NSMutableArray. Ich möchte das Wörterbuch mit einem bestimmten Schlüssel aktualisieren, der sich innerhalb des Arrays auf einem bestimmten Index befindet. Ich möchte den Index dieses Wörterbuchobjekts finden. Momentan ist mein Wörterbuch auf Index 0 und meine editingIndexPath ist 1, die vom Typ NSIndexPath ist, also editingIndexPath.row hilft mir nicht.Finding Index von NSMutableDictionary in einem NSMutableArray

Mein Code ist wie folgt:

//UpdatedDateAndTime is the NSMutableArray. 
    //selectedDay is a NSString object. 
    //dateKeySelected is also a string key. 

    [[updatedDateAndTime objectAtIndex:editingIndexPath.row] setObject:selectedDay forKey:dateKeySelected]; 

Mein Problem ist, dass ich die richtige Index des Wörterbuchs erhalten möchten, die gefunden wird.

+0

Was ist das Problem mit dem obigen Code? Setzt es den Schlüssel? Ist der Index des Wörterbuchs nicht identisch mit editingIndexPath.row? –

+0

@TejaNandamuri ... Nein! Was wäre, wenn das Wörterbuch bereits im Array vorhanden wäre? Für mich war es bei "index" mit dem Wert "0", während in der Tabellenansicht meine Zelle, die diesem Wörterbuch entspricht, "editingIndexPath.row" ist, was "1" ist. Ich möchte den Array-Index, der dem Wörterbuch entspricht. – Ron

+0

Woher wissen Sie, dass das der Index 1 ist? Wie vergleichen Sie die Wörterbücher? – Larme

Antwort

1

Die Antwort verwendet eine mit einem Zähler für Schleife sein, aber Sie haben Glück: NSArray hat eine neue Methode, indexOfObject:, die den Trick feinen gerade tun sollten:

NSUInteger i = [myArray indexOfObject:@{myKey:myValue}]; 

Swift: index(of:)

+0

Ich bekomme den Indexwert so lang. '9223372036854775807' – Ron

+0

Danke! Ich war in der Lage, den richtigen Index zu bekommen. Warum ich diesen Index bekommen habe, lag daran, dass ich das korrekte Wörterbuchobjekt nicht übergeben habe. – Ron

0

Wenn Ihr Array nur eine spezielle NSMutableDictionary enthält, verwenden Sie den folgenden Code. Ich habe es nicht getestet, aber die Idee ist, NSMutableDictionary Klasse im Array zu suchen. Und Sie müssen diese Suche in indexPath tun, die der Zelle entspricht, der Sie einige Daten zuweisen möchten.

@interface ViewController(){ 
    NSMutableArray *array; 
    NSMutableDictionary *dictionary; 
} 

@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

} 

- (UITableViewCell*) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; 
    if (indexPath.row == 1) { 
     for (int i = 0; i < array.count; i++) { 
      if ([updatedDateAndTime[i] objectForKey:@"open_house_updated_date"] == selectedDay) { 
      NSLog(@"%i th index contains NSMutableDictionary that you want",i); 
      //do whatever needed 
      break; 
     } 
     } 
    } 
    else{ 
     //define other cells which doesn't contain NSMutableDictionary 
    } 
    return cell; 
} 

@end 

Ich hoffe, das ist, was Sie suchen.

+0

Vielen Dank für Ihre Unterstützung. Das Array besteht jedoch aus vielen NSMutableDictionary-Objekten. Daher wäre dies nicht der Fall. – Ron

+0

Also muss es ein Kriterium geben, um nach dem richtigen Wörterbuch zu suchen und was ist das? – icould

+0

'NSString * dateKeySelected = @" open_house_updated_date ";' 'NSPredicate * PrädikatString = [NSPredikat PrädikatWithFormat: @"% K! = NULL ", dateKeySelected]; // Wörterbücher die key' mit 'NSArray * filteredArray = [updatedDateAndTime filteredArrayUsingPredicate: predicateString];' ' NSMutableDictionary * updatedDay = [[NSMutableDictionary alloc] init];' ' [updatedDay setObject: selectedDay forKey: @ "open_house_updated_date" ]; ' – Ron

Verwandte Themen