2016-07-11 5 views
-2

Jetzt habe ich eine Textansicht, und ich erhalte Inhaltsnachricht, ich werde tun NSString * speakText = [[NSString Alloc] initWithFormat: @ "% @ \ n% @ \ n% @ ", vonWho, content, _cheatView.text]; um es zu zeigen. Aber jetzt möchte ich ein Array erstellen, alle Nachrichten speichern, In einem Array wieIch möchte ein ChatLog erstellen, aber ich weiß nicht, wie es geht

Probe
> [0] (first message 3pair key/value) 
    >[0] 
    >[1] 
    >[2] 
>[1] (second message 3pair key/value) 
>[2] 
>[x] 
>[y] 

habe ich versucht, den Einsatz

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage: (id)message; 
{ 
NSString *toMessageJson = [[NSString alloc]initWithString:message]; 
    [toMessageJson dataUsingEncoding:NSUTF8StringEncoding]; 
    NSData *toMessageData =[toMessageJson dataUsingEncoding:NSUTF8StringEncoding]; 
    NSError *error = nil; 
    NSDictionary *messageDic = [NSJSONSerialization JSONObjectWithData:toMessageData options:NSJSONReadingAllowFragments error:&error]; 
    NSMutableArray *logDic =[NSMutableArray alloc]; 

    [messageDic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL * stop) { 
      if ([key isEqualToString:@"content"]) {  
       [logDic addObject:messageDic]; 
     } 
    }]; 

Aber die logArray immer nur 1 Objekt haben.

+0

Können Sie zeigen, wo und wie Sie füllen Nachricht und logArray. Geben Sie nur, wie Sie Nachricht an LogArray hinzufügen, scheint unvollständig zu sein, da es nicht vollständig zeigt, was das Problem verursachen kann, nur 1 Objekt im Array zu haben. – Joshua

+0

ist (ID) Nachricht immer ein Wörterbuch? Ich nehme an, Nachricht wird immer eine einzelne Nachricht sein? und jedes Mal, wenn Sie eine neue Nachricht erhalten, wird diese Methode aufgerufen, bin ich richtig? – Joshua

+0

@Joshua (id) Nachricht ist JSON, es ist eine einzelne Nachricht! Wenn der Server die Nachricht erhält, wird er angerufen! –

Antwort

0

Ich denke, dass logDic ist verwirrend. Zuerst dachte ich, logDic ist ein Wörterbuch, eine korrekte Benennung sollte auch stattfinden.

Hauptproblem, das ich sehen kann, ist, dass Sie logDic immer jedes Mal erstellen, wenn Sie eine Nachricht erhalten.

Also, wenn Sie logDic als eine Eigenschaft oder ein iVar machen.

Beispiel:

//WhatEverClassname @interface WhatEverClassname(){ NSMutableArray *logDic; } @end @implementation WhatEverClassname -(id)init{ if(!(self = [super init])){ return nil; } logDic = [NSMutableArray new]; return self; } @end

dann in Ihrer didReceived Methode brauchen Sie es nicht mehr zu initialisieren.

Diese Aufzählung wird nicht wirklich benötigt.

[message enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL * stop) ]

es sollte wie:

if(message[@"content"] != nil) [logDic addObject:message[@"content"]]; // no point in looping if you are only expecting a specific key.

+0

Ich habe es versucht, aber die logDic bekommen "null", –

+0

Haben Sie es richtig initialisiert? Haben Sie die Verwendung von Haltepunkten überprüft? wenn Sie es tatsächlich zu logDic hinzufügen? – Joshua

+0

Ich überprüfe erneut, als ich das Problem fand, war ich zu neu vergessen .. danke –