我想创建一个chatLog,但我不知道该怎么做

时间:2016-07-11 02:44:20

标签: objective-c nsmutablearray

现在我有一个textview,我会收到内容消息,我会这样做 NSString * speakText = [[NSString alloc] initWithFormat:@"%@ \ n%@ \ n%@&#34 ;, fromWho,content,_cheatView.text]; 展示它。 但现在我想创建一个数组来保存所有消息, 在像样本

的数组中
> [0]  (first message 3pair key/value)
   >[0]
   >[1]
   >[2]
>[1] (second message 3pair key/value)
>[2]
>[x]
>[y]

我尝试过使用

- (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];
        }
    }];

但是logArray总是只有1个Object。

1 个答案:

答案 0 :(得分:0)

我认为logDic令人困惑。起初我以为logDic是一本字典,也应该进行正确的命名。

我可以看到的主要问题是,每次收到消息时,您始终都在创建logDic。

因此,如果您将logDic作为属性或iVar。

示例:

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

然后在您的didReceived方法中,您不再需要初始化它。

这个枚举实际上并不需要。

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

应该是这样的:

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