Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios XMPP,CoreData-如何仅加载自身和目标用户消息?_Ios_Iphone_Xcode_Core Data_Xmpp - Fatal编程技术网

Ios XMPP,CoreData-如何仅加载自身和目标用户消息?

Ios XMPP,CoreData-如何仅加载自身和目标用户消息?,ios,iphone,xcode,core-data,xmpp,Ios,Iphone,Xcode,Core Data,Xmpp,我保存到核心数据并用下面的代码加载所有消息,但是我如何才能只加载2个用户的消息,对于自我用户和目标用户,我希望基于用户JID NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init]; NSManagedObjectContext *context = [[self appDelegate].xmppMessageArchivingCoreDataStorage mainThreadManagedObjectContext]; N

我保存到核心数据并用下面的代码加载所有消息,但是我如何才能只加载2个用户的消息,对于自我用户和目标用户,我希望基于用户JID

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"

假设您的消息对象具有从到用户实体的
关系。
只需添加(在执行请求之前):

其中
selfUser
otherUser
User
核心数据管理对象或用户的管理对象ID。

如果使用字段标识符(高度不推荐):

您可能想阅读您可以这样使用的

-(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]];

我使用了以下方法,并且工作正常:)


我使用fetchRequest.predicate=[NSPredicate predicateWithFormat:@“bareJidStr=%@或bareJidStr=%@”、self.sourceUser.uJid、self.destinationUser.uJid];但是我仍然有来自所有用户的消息,在消息条目中,我没有从该用户id中获得消息,它是有问题的添加输出。我不太确定出了什么问题,并且您的输出没有说明太多,也没有使用谓词。您需要在执行请求之前设置谓词。问题可能出在from=”168@kotikiwebcrew.com/ms MacBook Air”和[NSPredicate predicateWithFormat:@“from=%@或from=%@”,是否可以在没有详细信息的情况下从字段中获取?
 fetchRequest.predicate = [NSPredicate predicateWithFormat:@"bareJID.bare = %@ OR bareJID.bare = %@",selfUser.jid,otherUser.jid];
-(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]];
-(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];
            }

        }
    }];
}