完成 Moment 和 Mine 模块的 API 集成

Moment 模块:
-  集成真实动态列表 API (momentsRecommendList)
-  集成点赞 API (momentsLike)
-  使用 MomentsInfoModel 替代 mock 数据
-  实现时间格式化(相对时间显示)
-  实现点赞状态切换和 UI 更新
-  分页加载功能完善

Mine 模块:
-  集成用户信息 API (getUserInfo)
-  集成钱包信息 API (getUserWalletInfo)
-  使用 UserInfoModel 和 WalletInfoModel
-  头部视图动态显示真实数据
-  昵称、等级、经验、关注/粉丝数

改进:
- NewMomentCell: 支持点赞交互,实时更新
- NewMineViewController: viewWillAppear 时自动刷新数据
- 所有 API 调用都有错误处理和日志

下一步:
- 测试真实 API 调用是否成功
- 完善评论和发布功能
- 准备图片资源
This commit is contained in:
edwinQQQ
2025-10-09 19:02:02 +08:00
parent bf31ffda51
commit 5294f32ca7
7 changed files with 399 additions and 60 deletions

View File

@@ -9,6 +9,10 @@
#import "NewMomentViewController.h"
#import "NewMomentCell.h"
#import <Masonry/Masonry.h>
#import "Api+Moments.h"
#import "AccountInfoStorage.h"
#import "MomentsInfoModel.h"
#import <MJExtension/MJExtension.h>
@interface NewMomentViewController () <UITableViewDelegate, UITableViewDataSource>
@@ -25,8 +29,8 @@
// MARK: - Data
///
@property (nonatomic, strong) NSMutableArray *dataSource;
/// MomentsInfoModel
@property (nonatomic, strong) NSMutableArray<MomentsInfoModel *> *dataSource;
///
@property (nonatomic, assign) NSInteger currentPage;
@@ -87,28 +91,36 @@
self.isLoading = YES;
NSLog(@"[NewMomentViewController] 开始加载数据,页码: %ld", (long)self.currentPage);
// TODO: API
// 使
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//
for (int i = 0; i < 10; i++) {
NSDictionary *mockData = @{
@"id": @(self.currentPage * 10 + i),
@"content": [NSString stringWithFormat:@"这是第 %ld 页的第 %d 条动态", (long)self.currentPage, i],
@"images": @[],
@"likeCount": @(arc4random() % 100),
@"commentCount": @(arc4random() % 50),
};
[self.dataSource addObject:mockData];
}
self.currentPage++;
// API
NSString *page = [NSString stringWithFormat:@"%ld", (long)self.currentPage];
NSString *pageSize = @"10";
NSString *types = @"0,2"; // 0=2=
[Api momentsRecommendList:^(BaseModel * _Nullable data, NSInteger code, NSString * _Nullable msg) {
self.isLoading = NO;
[self.tableView reloadData];
[self.refreshControl endRefreshing];
NSLog(@"[NewMomentViewController] 数据加载完成,当前数据量: %lu", (unsigned long)self.dataSource.count);
});
if (code == 200 && data.data) {
//
NSArray *list = [MomentsInfoModel mj_objectArrayWithKeyValuesArray:data.data];
if (list.count > 0) {
[self.dataSource addObjectsFromArray:list];
self.currentPage++;
[self.tableView reloadData];
NSLog(@"[NewMomentViewController] 加载成功,新增 %lu 条动态", (unsigned long)list.count);
} else {
NSLog(@"[NewMomentViewController] 没有更多数据");
}
} else {
NSLog(@"[NewMomentViewController] 加载失败: code=%ld, msg=%@", (long)code, msg);
// API
if (self.dataSource.count == 0) {
//
[self showAlertWithMessage:msg ?: @"加载失败"];
}
}
} page:page pageSize:pageSize types:types];
}
- (void)onRefresh {
@@ -143,8 +155,8 @@
NewMomentCell *cell = [tableView dequeueReusableCellWithIdentifier:@"NewMomentCell" forIndexPath:indexPath];
if (indexPath.row < self.dataSource.count) {
NSDictionary *data = self.dataSource[indexPath.row];
[cell configureWithData:data];
MomentsInfoModel *model = self.dataSource[indexPath.row];
[cell configureWithModel:model];
}
return cell;