https://github.com/netease-im/NIM_iOS_UIKit/blob/master/Documents/nim_custom_message.md 文档有点坑。。很多细节没提
直接未知类型消息错误;
不过文档大概给出了思路:
1、model 里面 encode编码;
2、启动时候注册解析器; (Demo已经处理了)
//注册自定义消息的解析器
[NIMCustomObjectregisterCustomDecoder:[NTESCustomAttachmentDecodernew]];
3、解码decode
NTESCustomAttachmentDecoder类中进行解码
4、布局
OK 这里面关键四步;
为了排除其他错误, 直接拿NIMDemo 新增自定义消息 赠送礼物吧;
typedef NS_ENUM(NSInteger,NTESCustomMessageType){
CustomMessageTypeJanKenPon = 1,//剪子石头布
CustomMessageTypeSnapchat = 2,//阅后即焚
CustomMessageTypeChartlet = 3,//贴图表情
CustomMessageTypeWhiteboard = 4, //白板会话
CustomMessageTypeSendGift = 5, //赠送礼物
};
新建model
NTESSendGiftAttachment 这里不码代码了 直接copy 猜拳model代码;
新建内容View
NTESSessionSendGiftContentView 一样copy 猜拳View代码;
记得model和View 里面的消息类型 要替换 CustomMessageTypeSendGift 赠送礼物嘛。。。
model里面 更改View类名
- (NSString *)cellContent:(NIMMessage *)message{
return@"NTESSessionSendGiftContentView";
}
OK 这里面已经搞定了model View和编码encode了
在解码decode类中两个方法 新增条件
- (id<NIMCustomAttachment>)decodeAttachment:(NSString *)content
{
。。。。。。。。
caseCustomMessageTypeSendGift:
{
attachment = [[NTESSendGiftAttachmentalloc] init];
((NTESSendGiftAttachment *)attachment).value = [datajsonInteger:CMValue];
}
break;
}
- (BOOL)checkAttachment:(id<NIMCustomAttachment>)attachment{
else if ([attachment isKindOfClass:[NTESSendGiftAttachmentclass]]) {
NSInteger value = [((NTESSendGiftAttachment *)attachment)value];
check = (value >= 1 && value <=3) ? YES :NO;
}
}
OK 搞定解码
接下来找到布局类
NTESCellLayoutConfig
新增自定义的消息类型
- (instancetype)init
{
if (self = [superinit])
{
_types = @[
@"NTESJanKenPonAttachment",
@"NTESSnapchatAttachment",
@"NTESChartletAttachment",
@"NTESWhiteboardAttachment",
@"NTESSendGiftAttachment"
];
。。。。。
}
returnself;
}
最后 写调用方面调用。。。。
调用成功了 猜拳已经OK了
那么接下来 我们自行替换model 和 View即可;
最后总结自己报错原因: 最后一步布局配置 里面 NTESCellLayoutConfig 没有新增自定义的消息类型