i保存到核心数据并使用下面的代码加载所有消息,但是我如何为2个用户,自我用户和目标用户加载消息,我希望它基于用户jid base。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSManagedObjectContext *context = [[self appDelegate].xmppMessageArchivingCoreDataStorage mainThreadManagedObjectContext];
NSEntityDescription *messageEntity = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject" inManagedObjectContext:context];
fetchRequest.entity = messageEntity;
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"timestamp" ascending:YES];
fetchRequest.sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSError *error = nil;
NSArray *results = [context executeFetchRequest:fetchRequest error:&error];
//Now you get the NSArray with element type of "XMPPMessageArchiving_Message_CoreDataObject"
假设您的消息对象对User
实体具有from
RessptionHit。
与添加(执行请求之前)一样简单:
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"from = %@ OR from = %@",selfUser,otherUser];
其中selfUser
和otherUser
是User
用户的核心数据管理对象或托管对象ID。
如果您使用字段标识符(高度不建议):
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"bareJID.bare = %@ OR bareJID.bare = %@",selfUser.jid,otherUser.jid];
您可能想阅读此
我使用了以下方法,并且它正常工作:)
-(void)checkForPastMessageAndDisplayIt
{
NSString *strmyid = @"user1@domain";
NSString *strBuddy = @"user2@domain";
NSManagedObjectContext *moc = [[self appDelegate] managedObjectContext_message_achiving];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
inManagedObjectContext:moc];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"bareJidStr = %@ OR bareJidStr = %@", strmyid, strBuddy];
[fetchRequest setEntity:entity];
NSError *error;
NSArray *messagesArray = [moc executeFetchRequest:fetchRequest error:&error];
[messagesArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
id messageObject = [messagesArray objectAtIndex:idx];
if ([messageObject isKindOfClass:[XMPPMessageArchiving_Message_CoreDataObject class]]) {
XMPPMessageArchiving_Message_CoreDataObject *currentMessageCoreDataObject = (XMPPMessageArchiving_Message_CoreDataObject*)messageObject;
XMPPMessage *message = currentMessageCoreDataObject.message;
if (message!=nil) {
[messages addObject:message];
}
}
}];
}
您可以像那样使用
-(void)testMessageArchiving {
NSString *strmyid = @"myid";
NSString *strBuddy ="toid";
NSLog(@"my id and buddy is is %@ and %@",strmyid,strBuddy);
XMPPMessageArchivingCoreDataStorage *storage = [XMPPMessageArchivingCoreDataStorage sharedInstance];
NSManagedObjectContext *moc = [storage mainThreadManagedObjectContext];
NSEntityDescription *entityDescription = [NSEntityDescription entityForName:@"XMPPMessageArchiving_Message_CoreDataObject"
inManagedObjectContext:moc];
NSFetchRequest *request = [[NSFetchRequest alloc]init];
request.predicate = [NSPredicate predicateWithFormat:@"bareJidStr = %@ OR bareJidStr = %@", strmyid, strBuddy];
NSError *error;
NSArray *messages = [moc executeFetchRequest:request error:&error];
// NSLog(@"the history of messages is %@",messages);
[self print:[[NSMutableArray alloc]initWithArray:messages]];