浏览 SDKs · iOS
平台
SDKsiOS

分页获取好友列表

分页获取 iOS 当前用户的好友列表。

复制

通过分页接口分批获取好友列表,避免一次性加载过多数据造成界面卡顿:

参数说明

参数类型说明
offsetNSInteger分页起始偏移量,首屏传 0。
countNSInteger每页拉取的数据条数。
filterBlackBOOL是否自动过滤已被拉入黑名单的好友。
[[OIMManager manager] getFriendListPageWithOffset:0
                                             count:50
                                       filterBlack:YES
                                         onSuccess:^(NSArray<OIMFriendInfo *> *friends) {
                                             [friendStore replaceFirstPage:friends];
                                         }
                                         onFailure:^(NSInteger code, NSString *message) {
                                             NSLog(@"getFriendListPage failed: %ld %@", (long)code, message);
                                         }];

状态以 userID 为合并标识。加载更多页时递增偏移量,并对列表进行去重合并。

返回结果

成功回调 onSuccess 返回当前分页的 NSArray<OIMFriendInfo *> * 数组。查询操作仅返回调用时刻的数据快照,不触发好友事件。

监听好友关系与资料变更

实现 OIMFriendshipListener 协议处理好友新增、资料更新与好友删除事件:

@interface FriendshipStore () <OIMFriendshipListener>
@end

@implementation FriendshipStore

- (void)startListening {
    [[OIMManager callbacker] addFriendListener:self];
}

- (void)stopListening {
    [[OIMManager callbacker] removeFriendListener:self];
}

- (void)onFriendAdded:(OIMFriendInfo *)info {
    [friendStore mergeFriend:info];
}

- (void)onFriendInfoChanged:(OIMFriendInfo *)info {
    [friendStore mergeFriend:info];
}

- (void)onFriendDeleted:(OIMFriendInfo *)info {
    [friendStore removeUserID:info.userID];
}

@end

分页查询与之后到达的 delegate 分别处理,并始终按 userID 合并。退出登录、切换账号或销毁联系人状态层时调用 stopListening。