我写的是一朋友圈的功能,需要显示状态的点赞数和评论数,但是点赞和评论的接口都是 block异步获取,在格式化 model的时候无法正常获取,所以想请求解决方法,非常感谢。
-(HxAlbumModel *)factoryModel:(BmobObject *)obj statusType:(StatusType)type{
hxAlbum *albumOBj = [[hxAlbum alloc] initFromBmobObject:obj];
NSMutableArray* photos=[NSMutableArray array];
NSArray * albumPhotos = [obj objectForKey:@"albumPhotos"];
if (albumPhotos.count !=0) {
for(NSString * photoUrl in albumPhotos){
hxAlbumPhoto *photo = [hxAlbumPhoto photoWithOriginUrl:photoUrl thumbnailUrl:[NSString stringWithFormat:@"%@!/format/png",photoUrl]];
[photos addObject:photo];
}
}
//这里格式化 model数据,其中的commentArray和digArray 需要从 block块内异步获取的,这里我就不知道如何操作比较好,所以想问问。非常感谢。
HxAlbumModel*model = [HxAlbumModel hxAlbuMmodelWithType:Status_ENUM_TYPE fromUser:albumOBj.creator bmobOject:albumOBj avatar:[albumOBj.creator objectForKey:KEY_AVATAR] time:[albumOBj.createdAt stringWithFormat:@"MM-dd HH:mm"] statusID:albumOBj.objectId statusCreateAt:[NSString stringWithFormat:@"%.3lf",[albumOBj.createdAt timeIntervalSince1970]] digArray:albumOBj.toDigs commentArray:albumOBj.toStatusComments contentText:albumOBj.timeline photosArray:photos statusContentRelatedType:nil];
return model;
}
//查询点赞的关联表
- (void)queryDigsRelation:(NSString*)statusID toDigs:(void(^)(NSMutableArray * toDigs))sucessed{
//关联对象表
BmobQuery *bquery = [BmobQuery queryWithClassName:@"_User"];
//需要查询的列
BmobObject *post = [BmobObject objectWithoutDataWithClassName:@"hxAlbum" objectId:statusID];
[bquery whereObjectKey:@"toDigs" relatedTo:post];
[bquery findObjectsInBackgroundWithBlock:^(NSArray *array, NSError *error) {
if (error) {
NSLog(@"%@",error);
}else{
[array enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
BmobObject *user = obj;
NSLog(@"===%@",[user objectForKey:@"username"]);
}];
sucessed([array copy]);
}
}];
}
无
在你的情况下,由于点赞和评论的数据是异步获取的,而你在格式化 HxAlbumModel
时需要这些数据,你需要调整你的代码结构来适应异步数据的处理。一个常见的做法是使用回调、闭包(block)或者使用响应式编程(如 RxSwift, Combine 等)来管理异步流。
这里,我将展示如何使用闭包(block)来重构你的代码,以便在数据可用时更新你的模型。
factoryModel
方法,使其接受一个完成回调,该回调在异步数据加载完成后被调用。queryDigsRelation
方法时,将结果传递给 factoryModel
的完成回调。首先,修改 factoryModel
方法以接受一个额外的完成回调参数:
typedef void (^HxAlbumModelCompletionBlock)(HxAlbumModel * _Nullable model, NSError * _Nullable error);
- (void)factoryModel:(BmobObject *)obj statusType:(StatusType)type completion:(HxAlbumModelCompletionBlock)completion {
hxAlbum *albumOBj = [[hxAlbum alloc] initFromBmobObject:obj];
NSMutableArray *photos = [NSMutableArray array];
NSArray *albumPhotos = [obj objectForKey:@"albumPhotos"];
if (albumPhotos.count != 0) {
for (NSString *photoUrl in albumPhotos) {
hxAlbumPhoto *photo = [hxAlbumPhoto photoWithOriginUrl:photoUrl thumbnailUrl:[NSString stringWithFormat:@"%@!/format/png", photoUrl]];
[photos addObject:photo];
}
}
// 初始化模型但不包含点赞和评论
HxAlbumModel *model = [HxAlbumModel hxAlbuMmodelWithType:Status_ENUM_TYPE fromUser:albumOBj.creator bmobOject:albumOBj avatar:[albumOBj.creator objectForKey:KEY_AVATAR] time:[albumOBj.createdAt stringWithFormat:@"MM-dd HH:mm"] statusID:albumOBj.objectId statusCreateAt:[NSString stringWithFormat:@"%.3lf", [albumOBj.createdAt timeIntervalSince1970]] digArray:@[] commentArray:@[] contentText:albumOBj.timeline photosArray:photos statusContentRelatedType:nil];
// 异步获取点赞和评论
[self queryDigsRelation:albumOBj.objectId toDigs:^(NSMutableArray *toDigs) {
// 假设还有一个方法来获取评论
[self queryCommentsRelation:albumOBj.objectId toComments:^(NSMutableArray *toComments) {
// 更新模型
model.digArray = toDigs;
model.commentArray = toComments;
// 调用完成回调
completion(model, nil);
}];
}];
}
// 假设的获取评论的方法
- (void)queryCommentsRelation:(NSString *)statusID toComments:(void(^)(NSMutableArray *toComments))sucessed {
// 这里实现获取评论的逻辑
// 完成后调用 sucessed
}
注意:
factoryModel
现在是一个异步方法,它不会立即返回模型,而是在数据准备好后通过回调返回。queryCommentsRelation
方法来模拟获取评论的过程,你需要根据你的实际API来实现它。queryDigsRelation
的回调中,我们调用了 queryCommentsRelation
并在获取到所有需要的数据后更新了模型并调用了完成回调。这样,你就可以在数据完全加载后处理或显示你的模型了。
本文向大家介绍uni-app实现点赞评论功能,包括了uni-app实现点赞评论功能的使用技巧和注意事项,需要的朋友参考一下 模拟朋友圈实时点赞及评论功能 点赞思路:点击的时候,使用push(点赞)以及slice(取消赞)方法处理数组,并且调用点赞接口 评论思路:点击的时候,写多一个评论列表,当点击发送的时候commentStatus=true,且索引等于点击的索引。同时调用获取评论列表的接口 ht
我阅读了Instagram订阅API的新文档。它说,在你订阅后,当人们在他们的页面上发布新媒体时,Instagram会通知你。 我想被通知当一个用户的帖子收到一个新的喜欢或评论? 你觉得这可能吗?
本文向大家介绍Android PraiseTextView实现朋友圈点赞功能,包括了Android PraiseTextView实现朋友圈点赞功能的使用技巧和注意事项,需要的朋友参考一下 PraiseTextView 说明 我是将朋友圈分成了几个独立模块单独自定义的View,通过回调完成交互,耦合性算是非常低了,主要有以下及部分: 1.评论布局(自定义TextView) CommentListTe
我想喜欢一个关于脸书的帖子的评论,我使用和喜欢帖子一样的。对于一个帖子来说,它是有效的,但是对于一个评论来说,它是无效的。 医生:https://developers.facebook.com/docs/graph-api/reference/object/likes 我的代码: 错误是: error Domain = com . Facebook . SDK Code = 5 "操作无法完成。(
使用方法:进入动态-查看别人动态-评论/点赞
请求header GET /v1/activity/{频道id}/comments/count Authorization:Bearer {ACCESS TOKEN} 注: 请将上方的{ACCESS TOKEN}替换为您的ACCESS TOKEN 请将"{频道id}"替换您需要获取的频道id 返回 { "count": 100 } 返回参数说明 参数 描述 类型 备注 count 数目