1
This commit is contained in:
151
keyBoard/Class/AiTalk/类名冲突解决说明.md
Normal file
151
keyBoard/Class/AiTalk/类名冲突解决说明.md
Normal file
@@ -0,0 +1,151 @@
|
||||
# 类名冲突解决说明
|
||||
|
||||
## 🐛 问题
|
||||
|
||||
在实现新的聊天 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`(新的)
|
||||
|
||||
两者各司其职,互不干扰!✅
|
||||
Reference in New Issue
Block a user