在項目中,集成了環信sdk,當使用
- (id<IConversationModel>)conversationListViewController:(EaseConversationListViewController *)conversationListViewController modelForConversation:(EMConversation *)conversation;
這個方法時候,發現,返回的是一個model,而我在拼接model時候,需要進行查詢操作,查詢操作在block中,如下:
[[DataBaseHandle shareDataBaseHandle] selectOneTabelName:@"contactList"
cls: MUCContactListModel.class
key:@"huanxinId" value:conversation.conversationId
result:
^(NSArray *resultArray) {
listModel = resultArray.firstObject;
} error:^(NSError *error) {
mError = error;
}];
問題再此出現了:需要的model在block中,不知道什么時候執行完成,而這個方法又要返回該model,該如何處理呢?
最后,問題如下解決了:
- (id<IConversationModel>)conversationListViewController:(EaseConversationListViewController *)conversationListViewController modelForConversation:(EMConversation *)conversation {
EaseConversationModel *model = [[EaseConversationModel alloc] initWithConversation:conversation];
if (model.conversation.type == EMConversationTypeChat) {
#warning !!!replaceFMDBByFMDBQueue---
__block MUCContactListModel *listModel = nil;
__block NSError *mError = nil;
[[DataBaseHandle shareDataBaseHandle] selectOneTabelName:@"contactList"
cls: MUCContactListModel.class
key:@"huanxinId" value:conversation.conversationId
result:
^(NSArray *resultArray) {
listModel = resultArray.firstObject;
} error:^(NSError *error) {
mError = error;
}];
do {
usleep(500);
} while (!listModel || !mError);
if (mError) {
DLog(@"%@",mError.description);
return model;
}
model.title = listModel.name;
model.avatarURLPath = listModel.photo;
model.avatarImage = nil;
}
return model;
}
即:在block代碼塊后面,進行一個循環判斷,只有當出現error,或者有model的時候,再向下執行,否則就持續休眠500毫秒。
