iOS学习笔记-环信UI3.0集成中的问题
来源:互联网 发布:mac os 开机密码忘记 编辑:程序博客网 时间:2024/06/03 16:33
1.UserProfileManager
做为整个项目中管理用户entity的类,它封装了很多实用方法,我们可以采用原来的大部分内容,但是要把原demo中Parse相关部分注释掉,自己来完成数据从远程的读取和存储,以及如何存储在本地;
static UserProfileManager *sharedInstance = nil;@interface UserProfileManager (){ NSString *_curusername;}@property (nonatomic, strong) NSMutableDictionary *users;@property (nonatomic, strong) NSString *objectId;//@property (nonatomic, strong) PFACL *defaultACL;@end
users数组存在周期为整个APP运行时段,所以可以作为数据缓存,app退出后就释放了,当然你可以在
- (void)loadUserProfileInBackgroundWithBuddy:(NSArray*)buddyList saveToLoacal:(BOOL)save completion:(void (^)(BOOL success, NSError *error))completion
方法里写存储到本地数据库的逻辑(FMDB)
这里我来示例一下:
- (void)loadUserProfileInBackground:(NSArray*)userInfos saveToLoacal:(BOOL)save completion:(void (^)(BOOL success, NSError *error))completion{ _users = [NSMutableDictionary dictionary]; for (NSDictionary *dic in userInfos) { MHJUserProfileEntity *entity = [MHJUserProfileEntity initWithDictionary:dic]; [_users setObject:entity forKey:[NSString stringWithFormat:@"%@",entity.username]];// NSLog(@"testst:%@",dic); } if (save) {//一般来说不用存储到本地,看个人需求了// NSString *table = [NSString stringWithFormat:@"a%@",USERNAME];//防止以数字开头,所以加个a,数据库中表是不能以数字开头的// FMDatabase *myUserDB = [FMDatabase databaseWithPath:UserEntityDB_Path];// if ([myUserDB close]) {// [myUserDB open];// }// // // BOOL delete = [myUserDB executeUpdate:DeleteTable(table)];// if (delete) {// NSLog(@"成功删除该用户之前entity数据表");// }else{// NSLog(@"删除用户表失败");// }// //// // NSString *createEntityTable = CreatTable_ForUserEntity(table);// BOOL FactoryTable = [myUserDB executeUpdate:createEntityTable];// if(!FactoryTable){// NSLog(@"创建entity表失败,或许已存在表");// }else{// NSLog(@"创建entity表成功");// }// // for (MHJUserProfileEntity *entity in _users.allValues){//// int imageID;//// if ([myDic objectForKey:UserEntity_HXInfo] && ![[myDic objectForKey:UserEntity_HXInfo] isKindOfClass:[NSNull class]] && ![[myDic objectForKey:UserEntity_HXInfo] isEqualToString:@""]) {//// NSString *jsonString = [myDic objectForKey:UserEntity_HXInfo];//// NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];//// NSError *err;//// NSDictionary *infoDic = [NSJSONSerialization JSONObjectWithData:jsonData//// options:NSJSONReadingMutableContainers//// error:&err];//// if(err) {//// NSLog(@"json解析失败:%@",err);//// }//// //// if ([infoDic objectForKey:UserEntity_ImageId] && ![[infoDic objectForKey:UserEntity_ImageId] isKindOfClass:[NSNull class]]) {//// imageID = [[infoDic objectForKey:UserEntity_ImageId] intValue];//// }else{//// imageID = 0;//// }//// }// // BOOL res = [myUserDB executeUpdate:InsertTable_ForUserEntity(table,entity.userId,entity.sex,entity.imageUrl,entity.email,entity.username,entity.imageID,entity.nickname,entity.describe]);// if (!res) {// NSLog(@"插入document数据库成功");// }// }// [myUserDB close]; } if (self.users != nil) { if (completion) { completion(YES,nil); } } NSLog(@"缓存数据成功");}
上面的常量字符串我定义成了宏方法
#define UserEntityDB_Path [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0] stringByAppendingPathComponent:@"/test.db"]//判断表是否存在 - A 为表名#define ExistTable(Table) [NSString stringWithFormat:@"select count(*) as 'count' from sqlite_master where type ='table' and name = %@_Table",Table]//删除表#define DeleteTable(Table) [NSString stringWithFormat:@"delete from %@_Table",Table]//创建表#define CreatTable_ForUserEntity(Table) [NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS %@_Table (id INTEGER PRIMARY KEY,sex INTEGER,imageUrl TEXT,email TEXT,username TEXT,imageID INTEGER,usertitle TEXT,discription TEXT) ",Table]//查找表#define SelectTable_WhereUsername(Table,Username) [NSString stringWithFormat:@"SELECT * FROM %@_Table where username = %@",Table,Username]//向表中插入数据#define InsertTable_ForUserEntity(Table,A,B,C,D,E,F,G,H) [NSString stringWithFormat:@"insert into %@_Table(id,sex,imageUrl,email,username,imageID,usertitle,discription)values(%d,%d,'%@','%@','%@',%d,'%@','%@')",Table,A,B,C,D,E,F,G,H]
1.1 UserProfileEntity
在UserProfileManager里面声明了这个类,你可以自定义用户实体的属性如:
@interface UserProfileEntity : NSObject+ (instancetype)initWithPFObject:(PFObject*)object;@property (nonatomic,strong) NSString *objectId;@property (nonatomic,strong) NSString *username;@property (nonatomic,strong) NSString *nickname;@property (nonatomic,strong) NSString *imageUrl;@end
看自己的要求了。总之各种与用户数据相关的逻辑都可以写在这个类里;
2.ChatDemoHelper - 重要
这个类在整个环信项目中是最非常重要的,里面实现了大量的回调逻辑,比如收到消息,收到好友请求,收到静默消息(cmd消息),发送语音邀请等等;如果你想在接收到这些操作的同时相应事件,就得在这里写;(你可以换个符合你项目的名字 例如:TestHelper )
点开.m文件,方法名很易懂:
各种逻辑它都写好了,你可以仿写;
3.AppDelegate+EaseMob
用于处理SDK注册设置等相关逻辑,你只需要按他的来就行了;
4.出现:CopyPNGFile 异常错误
出现这种情况项目还是能够编译运行的
大部分原因是因为你项目中存在了多个这样的文件,删除,只留一个就行了;如果只有一个,那就是格式问题了
5.Decoder_Interface_init()崩溃错误
在环信UI3.0中,使用了音频转码
opencore-amrnb
opencore-amrwb
如果出现这个问题,一般是你独立集成一个环信测试demo,运行正常,但是当你集成到你公司项目中时,就崩溃了,这是静态库冲突的问题,我自己也没解决,如果静态库中同用了一个“工具”,但是是不同版本,那就会导致。
6.Library Search Path 的设置问题
如果对这方面比较熟悉,这段就用看了;
我们需要导入SDK和视频解码的静态库,一般来说Xcode会帮我们自动设置静态库的路径,但是如果出现:ld: library not found for xxxxx 的问题,那就是静态库路径错误了
我们找到静态库文件直接拖入:
拖入到$(inherited)的下方:
这里可以去掉引号,这样只导入了一个静态库,如果该文件下有多个静态库文件,你只需要导入该文件的路径就行了;
此外路径右边的 non-recursive 表示不检查这个文件下子目录所包含的静态库
如果设置为recursive,你直接写上工程总目录,静态库能够自动全部导入的;
7.便捷的显示方式[self showHint:@”提示信息”]
在环信中,使用了MBProgressHUD工具,其中方便快捷的显示提示框的方式来自分类:
使用者可以使用这种快捷方式,很方便,当然,这些我们也可以自己写某个工具类里面调用这些方法
有问题可以提问,我正愁没东西写,因为想不到
- iOS学习笔记-环信UI3.0集成中的问题
- [置顶] iOS学习笔记-环信UI3.0集成中的问题
- iOS学习笔记-集成环信UI3.0
- IOS开发-环信UI3.0集成(XCode8)
- iOS环信集成的用户信息问题
- iOS-集成环信
- iOS集成环信SDK点击聊天图片无效问题
- ios集成环信遇到的相关问题整理
- iOS集成环信客服
- iOS环信集成<1>
- iOS - IM环信集成
- iOS环信集成心得
- iOS 使用环信EaseUI3.0集成简单聊天遇到的问题!持续更新...
- iOS 环信集成方法之集成环信SDK
- 环信iOS SKD 3.1.0集成总结
- iOS - 集成环信聊天界面
- iOS 环信UI集成步骤
- iOS 集成环信(三) 添加好友
- 网络流SAP
- SecureCRT的使用方法和技巧
- docker容器的网络连接
- 实现qq空间返回重进控制器不销毁
- ACM 数论 hdu 1124 Factorial
- iOS学习笔记-环信UI3.0集成中的问题
- android studio如何把library生成jar包
- 敏捷开发Scrum 学习笔记,适于移动开发
- Android代码混淆
- The MathType DLL cannot be found.Please reinstall mathtype 解决方法
- (经典)POJ-3280 回文串DP
- String——anagrams 判断字符串是否互为变位词
- Linux系统下修改环境变量PATH路径
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释