152 lines
3.6 KiB
Markdown
152 lines
3.6 KiB
Markdown
# 类名冲突解决说明
|
||
|
||
## 🐛 问题
|
||
|
||
在实现新的聊天 UI 时,创建了 `KBChatMessage` 类,但与 `CustomKeyboard` 目录下已有的 `KBChatMessage` 类产生了命名冲突,导致 `KeyboardViewController` 编译报错:
|
||
|
||
```
|
||
Property 'audioFilePath' not found on object of type 'KBChatMessage *'
|
||
```
|
||
|
||
---
|
||
|
||
## 🔍 原因分析
|
||
|
||
项目中存在两个同名的 `KBChatMessage` 类:
|
||
|
||
### 1. CustomKeyboard/Model/KBChatMessage(旧的)
|
||
```objective-c
|
||
@interface KBChatMessage : NSObject
|
||
@property (nonatomic, copy) NSString *text;
|
||
@property (nonatomic, assign) BOOL outgoing;
|
||
@property (nonatomic, copy, nullable) NSString *audioFilePath; // ← 旧的属性
|
||
@property (nonatomic, copy, nullable) NSString *avatarURL;
|
||
@property (nonatomic, copy, nullable) NSString *displayName;
|
||
@property (nonatomic, strong, nullable) UIImage *avatarImage;
|
||
@end
|
||
```
|
||
|
||
**用途:** 键盘扩展(CustomKeyboard)中的聊天消息模型
|
||
|
||
---
|
||
|
||
### 2. keyBoard/Class/AiTalk/M/KBChatMessage(新的)
|
||
```objective-c
|
||
@interface KBChatMessage : NSObject
|
||
@property (nonatomic, assign) KBChatMessageType type;
|
||
@property (nonatomic, copy) NSString *text;
|
||
@property (nonatomic, strong) NSDate *timestamp;
|
||
@property (nonatomic, assign) NSTimeInterval audioDuration;
|
||
@property (nonatomic, strong, nullable) NSData *audioData; // ← 新的属性
|
||
@property (nonatomic, copy, nullable) NSString *audioId; // ← 新的属性
|
||
@property (nonatomic, assign) BOOL isComplete;
|
||
@end
|
||
```
|
||
|
||
**用途:** AI 聊天主界面(KBAiMainVC)中的消息模型
|
||
|
||
---
|
||
|
||
## ✅ 解决方案
|
||
|
||
将新创建的类重命名为 `KBAiChatMessage`,避免与旧类冲突。
|
||
|
||
---
|
||
|
||
## 📝 修改清单
|
||
|
||
### 1. 重命名类文件
|
||
- `KBChatMessage.h` → `KBAiChatMessage.h`
|
||
- `KBChatMessage.m` → `KBAiChatMessage.m`
|
||
|
||
### 2. 重命名类名
|
||
```objective-c
|
||
// 原来
|
||
@interface KBChatMessage : NSObject
|
||
|
||
// 修改为
|
||
@interface KBAiChatMessage : NSObject
|
||
```
|
||
|
||
### 3. 重命名枚举
|
||
```objective-c
|
||
// 原来
|
||
typedef NS_ENUM(NSInteger, KBChatMessageType) {
|
||
KBChatMessageTypeUser,
|
||
KBChatMessageTypeAssistant,
|
||
KBChatMessageTypeTime
|
||
};
|
||
|
||
// 修改为
|
||
typedef NS_ENUM(NSInteger, KBAiChatMessageType) {
|
||
KBAiChatMessageTypeUser,
|
||
KBAiChatMessageTypeAssistant,
|
||
KBAiChatMessageTypeTime
|
||
};
|
||
```
|
||
|
||
### 4. 更新所有引用
|
||
|
||
#### Cell 文件
|
||
- `KBChatUserMessageCell.h/m`
|
||
- `KBChatAssistantMessageCell.h/m`
|
||
- `KBChatTimeCell.h/m`
|
||
|
||
#### 视图文件
|
||
- `KBChatTableView.h/m`
|
||
|
||
#### 所有方法参数和属性
|
||
```objective-c
|
||
// 原来
|
||
- (void)configureWithMessage:(KBChatMessage *)message;
|
||
@property (nonatomic, strong) NSMutableArray<KBChatMessage *> *messages;
|
||
|
||
// 修改为
|
||
- (void)configureWithMessage:(KBAiChatMessage *)message;
|
||
@property (nonatomic, strong) NSMutableArray<KBAiChatMessage *> *messages;
|
||
```
|
||
|
||
---
|
||
|
||
## 📊 最终结构
|
||
|
||
### CustomKeyboard(键盘扩展)
|
||
```
|
||
CustomKeyboard/Model/
|
||
├── KBChatMessage.h ← 旧的,保持不变
|
||
└── KBChatMessage.m
|
||
```
|
||
|
||
**用途:** 键盘扩展中的聊天功能
|
||
|
||
---
|
||
|
||
### AiTalk(AI 聊天主界面)
|
||
```
|
||
keyBoard/Class/AiTalk/M/
|
||
├── KBAiChatMessage.h ← 新的,已重命名
|
||
└── KBAiChatMessage.m
|
||
```
|
||
|
||
**用途:** AI 聊天主界面的消息模型
|
||
|
||
---
|
||
|
||
## ✅ 验证
|
||
|
||
编译项目,确认:
|
||
- ✅ `KeyboardViewController` 不再报错
|
||
- ✅ `KBAiMainVC` 正常工作
|
||
- ✅ 两个模块互不干扰
|
||
|
||
---
|
||
|
||
## 🎯 总结
|
||
|
||
通过将新类重命名为 `KBAiChatMessage`,成功解决了类名冲突问题。现在:
|
||
|
||
- **CustomKeyboard** 使用 `KBChatMessage`(旧的)
|
||
- **AiTalk** 使用 `KBAiChatMessage`(新的)
|
||
|
||
两者各司其职,互不干扰!✅
|