>0原理:建立dataModel,然后建立NSManagedObject,就会自动建立模型和实体间的映射关系. 用
NSPersistentStoreCoordinator可以协调Model和Storage之间的关系;
>1模式:客户端-服务器-客户端.客户端的信息和聊天记录都存储在了服务器上;
>2用XMPPStream实现账户的注册和登录;
>3登陆后通过激活xmppRoster模块,让后通过
NSFetchedResultsController可以获取登录用户的全部好友,通过设置
NSFetchedResultsController的代理方法可以监听好友的变化,
NSFetchedResultsController的创建代码如下:
//
创建数据请求
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 实体 --> 从哪里获取数据
NSEntityDescription *entity = [NSEntityDescription entityForName: @"XMPPUserCoreDataStorageObject" inManagedObjectContext:[XMPPRosterCoreDataStorage sharedInstance].mainThreadManagedObjectContext];
request.entity = entity;
// 谓词 --> 获取哪些数据 ( 获取的是互为好友的情况 )
request.predicate = [NSPredicate predicateWithFormat: @"subscription = %@" , @"both" ];
// 排序
NSSortDescriptor *sort = [ NSSortDescriptor sortDescriptorWithKey : @"jidStr" ascending : YES ];
request.sortDescriptors = @[ sort ] ;
// 创建查询控制器
// sectionNameKeyPath 数据库的地址 传递 nil 代表默认地址
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:[XMPPRosterCoreDataStorage sharedInstance].mainThreadManagedObjectContext sectionNameKeyPath: nil cacheName: nil ];
// 设置代理 ( 当数据改变时 , 会自动调用代理方法 )
NSFetchRequest *request = [[NSFetchRequest alloc] init];
// 实体 --> 从哪里获取数据
NSEntityDescription *entity = [NSEntityDescription entityForName: @"XMPPUserCoreDataStorageObject" inManagedObjectContext:[XMPPRosterCoreDataStorage sharedInstance].mainThreadManagedObjectContext];
request.entity = entity;
// 谓词 --> 获取哪些数据 ( 获取的是互为好友的情况 )
request.predicate = [NSPredicate predicateWithFormat: @"subscription = %@" , @"both" ];
// 排序
NSSortDescriptor *sort = [ NSSortDescriptor sortDescriptorWithKey : @"jidStr" ascending : YES ];
request.sortDescriptors = @[ sort ] ;
// 创建查询控制器
// sectionNameKeyPath 数据库的地址 传递 nil 代表默认地址
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:[XMPPRosterCoreDataStorage sharedInstance].mainThreadManagedObjectContext sectionNameKeyPath: nil cacheName: nil ];
// 设置代理 ( 当数据改变时 , 会自动调用代理方法 )
_fetchedResultsController.delegate = self;
>4xmppRoster可以设置多波代理,实现多个页面的联动;
>5激活
xmppvCardAvatarModule模块可以获取别人的名片信息,激活
xmppvCardTempModule模块可以获取个人的名片信息
;
>6激活
XMPPRoom模块可以实现用户加入特定的房间;