我想创建一个聊天记录,但我不知道该怎么做
I want to create a chatLog ,but I don't know how to do it
现在我有一个文本视图,我收到内容消息,我会做
NSString *speakText=[[NSString alloc]initWithFormat:@"%@\n%@\n%@",fromWho,content,_cheatView.text];
展示它。
但现在我想创建一个数组来保存所有消息,
在像 sample
这样的数组中
> [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 个对象。
我认为 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.
现在我有一个文本视图,我收到内容消息,我会做 NSString *speakText=[[NSString alloc]initWithFormat:@"%@\n%@\n%@",fromWho,content,_cheatView.text]; 展示它。 但现在我想创建一个数组来保存所有消息, 在像 sample
这样的数组中> [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 个对象。
我认为 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.