2016-06-28 1 views
0

Die JSON aus dem Backend wird die folgendeObjC Wie gleiche JSON Datensätze anzuzeigen basierend auf ihren Schlüssel in einem einzigen UITableViewCell

"data": [ 
    { 
     "id": 108, 
     "userId": "84945dd7-4ebe-418a-b5ec-bd418d226778", 
     "notificationType": 0, 
     "messagingService": 1, 
     "status": 2 
    }, 
    { 
     "id": 109, 
     "userId": "84945dd7-4ebe-418a-b5ec-bd418d226778", 
     "notificationType": 0, 
     "messagingService": 2, 
     "status": 2 
    }, 
    { 
     "id": 110, 
     "userId": "84945dd7-4ebe-418a-b5ec-bd418d226778", 
     "notificationType": 1, 
     "messagingService": 1, 
     "status": 2 
    }, 
    { 
     "id": 111, 
     "userId": "84945dd7-4ebe-418a-b5ec-bd418d226778", 
     "notificationType": 1, 
     "messagingService": 3, 
     "status": 2 
    } 
    ] 

Ich hole die Datensätze in ein Array aus dem Backend

@property(nonatomic, strong)NSArray *userPreferences; 

Was ich erreichen möchte, ist, diese Datensätze mit demselben Schlüssel "notificationType" in einer einzelnen Zelle anzuzeigen, um die verschiedenen Typen des anderen Schlüssels "messagingService" darzustellen. Und schließlich tippen Sie auf einen beliebigen indexPath.row und wissen, welchen Datensatz ich gewählt habe und mache meine aktiv/inaktiv-Option.

+0

Also, wollen Sie eine Zeile, um alle Datensätze nach 'notificationType' gruppiert darzustellen? Ich verstehe nicht, was Sie darüber hinaus tun möchten –

+0

Ja, ich möchte sie kombinieren und gruppieren und sie (die gemeinsamen notificationTypes Einsen) zu einer einzigen Zelle zeigen, aber was ich derzeit aus dem Array bekomme, ist sie zu vielen verschiedenen zu füllen Zellen, es sieht aus wie eine wiederholte Zelle für den Benutzer – ReaLity

+0

Also würde ich damit umgehen, indem Sie neue veränderbare Wörterbuch erstellen. Durchqueren Sie "Daten" und erstellen Sie für jedes darin enthaltene Wörterbuch einen neuen Schlüssel/Wert in Ihrem neuen veränderbaren Wörterbuch, wobei der Schlüssel der "notificationType" ist und der Wert ein Array von "messagingService" -IDs ist. Wenn der Schlüssel 'notificationType' bereits vorhanden ist, hängen Sie den Nachrichtendienst an seinen Wert an. –

Antwort

0

danke für die Nachricht Jordan Bonitatisfor, basierend auf dem Beispiel das ist, was ich kam mit:

NSMutableDictionary *resultDict = [NSMutableDictionary dictionary]; 
       for (int i = 0; i < [preferences count]; i++) 
       { 
        if (resultDict[[preferences[i] valueForKey:@"notificationType"]]) { 
         //pull out the array and add to it 
         NSMutableArray *mutableArray = [[NSMutableArray alloc]initWithArray: resultDict[[preferences[i] valueForKey:@"notificationType" ]]]; 
         [mutableArray addObject:preferences[i]]; 
         [resultDict setValue:mutableArray forKey:[preferences[i] valueForKey:@"notificationType" ] ]; 
        } 
        else 
         { 
          NSArray *array = @[preferences[i]]; 
          [resultDict setValue:array forKey:[preferences[i] valueForKey:@"notificationType" ] ]; 
         } 
        } 

       [self.foundPreferences addObject:resultDict]; 

Wie kann ich die resultDict jetzt auf die richtige Zelle anhängen.

0

Nach harten Tests und Versuch und Irrtum gelang es mir, genau das zu erreichen, was ich mit Hilfe von Generics (nie zuvor benutzt) thx für alle Hilfe will.

NSMutableDictionary<NSNumber*, NSMutableDictionary<NSNumber *, KYNotificationPreference *> *> *preferences = [NSMutableDictionary new]; 

             for(NSDictionary *rawPreference in (*response).data){ 
              KYNotificationPreference *preference = [KYDeserializer notificationPreferenceFromSerializedObject:rawPreference]; 
              NSMutableDictionary *notificationTypeDictionary = preferences[@(preference.notificationType)]; 
              if(!notificationTypeDictionary){ 
               notificationTypeDictionary = [NSMutableDictionary new]; 
               [preferences setObject:notificationTypeDictionary forKey:@(preference.notificationType)]; 
              } 
              [notificationTypeDictionary setObject:preference forKey:@(preference.messagingService)]; 
             } 
Verwandte Themen