现在我有一个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。
答案 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.