我正在制作聊天应用程序,我正在寻找从核心数据中保存和加载的方法。 我保存并加载所有用户的历史记录,它运行良好。
我正在寻找如何加载和保存名册列表的方式
我不确定。我在启动时通过从名单列表中获取用户的ID来从web加载用户的信息,并请求该用户的信息的Web服务。我想用名单列表将其保存到核心数据中。
如何为每个jUser(从核心数据加载)设置他的Web服务器信息?这里有两个问题:
一些代码:
- (NSFetchedResultsController *)fetchedResultsController
{
if (_fetchedResultsController == nil)
{
NSManagedObjectContext *moc = [[self appDelegate] managedObjectContext_roster];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPUserCoreDataStorageObject"
inManagedObjectContext: moc];
NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"sectionNum" ascending:YES];
NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"displayName" ascending:YES];
NSArray *sortDescriptors = [NSArray arrayWithObjects: sd1, sd2, nil];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:entity];
[fetchRequest setSortDescriptors:sortDescriptors];
[fetchRequest setFetchBatchSize:10];
_fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:moc
sectionNameKeyPath:@"sectionNum"
cacheName:nil];
[_fetchedResultsController setDelegate:self];
NSError *error = nil;
if (![_fetchedResultsController performFetch:&error])
{
//DDLogError(@"Error performing fetch: %@", error);
}
}
return _fetchedResultsController;
}
答案 0 :(得分:0)
上面显示的是跟踪/获取使用XMPP服务器为其命名填充的信息(无论是autoFetch还是使用XMPPRoster'fetchRoster'方法手动获取(假设您已设置)存储名册数据的CoreData方式,而非内存)。
一旦返回对名册提取的响应(iq结果),XMPPRoster实例中的委托将捕获并使用给定的存储选项放置。如果您使用的服务器符合XMPP rfc,那么这应该在返回时自动发生。
例如 - 在XMPPRoster.didReceiveIQ()中 - 您可以看到对'[xmppStorage handleRosterItem:item xmppStream:xmppStream]'的调用。这是处理过的地方
您可以在此处扩展存储(例如,XMPPRosterCoreDataStorage和XMPPUserCoreDataStorage)并设置到位以向实体添加其他信息。例如,此处 - XMPPUserCoreDataStorage具有覆盖'(void)didUpdateWithItem:(NSXMLElement *)item',您可以将属性定义为指向另一个实体。在这里,您将复制现有的数据模型并添加自己的属性 - 使用上面的覆盖来输入它们。
至于消息,取决于MUC还是1:1 - 但它们也使用不同的管理对象。 XEP-0045是存储您可以尝试附加到那里的用户最后一条消息的MUC消息的内容 - 以及用于1:1存储的XMPPMessageArchiving,但是如果需要,您仍然需要服务器上的支持持续捕获另一个用户的最后一条消息 - 除非你只是谈论每个会话(然后你可以在本地存储以供显示)。