2017-06-27 55 views
1

我想脱机用户(朋友)状态:XMPPFramework - 如何获得离线用户配置文件状态

我的代码工作正常时,用户在线,所以我得到用户状态,但是当他进入脱机user.primaryResource.presence.status给值为nil

XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
NSLog(@"Status: %@",user.primaryResource.presence.status); 

用户后下线我检查XMPPResourceCoreDataStorageObject表特别jidStr当用户下线其删除该用户的ResourcesObject它给我零对象表示。

因此,有可能获得该用户的状态。

+0

按你指定的状态,用户是在线还是离线?如果是,那么如果'presense'给你零这不是说用户是'离线'? –

+0

状态表示在XMPPResourceCoreDataStorageObject - > object - > primaryResource中保存的存在状态,因此,当用户脱机时,XMPPResourceCoreDataStorageObject对象变为零。 –

+0

你有没有试用XMPPRosterCoreDataStorage? – dichen

回答

0

您检查XMPPUserCoreDataStorageObject

- (void)updateWithPresence:(XMPPPresence *)presence streamBareJidStr:(NSString *)streamBareJidStr 
{ 
    XMPPResourceCoreDataStorageObject *resource = 
     (XMPPResourceCoreDataStorageObject *)[self resourceForJID:[presence from]]; 

    if ([[presence type] isEqualToString:@"unavailable"] || [presence isErrorPresence]) 
    { 
     if (resource) 
     { 
      [self removeResourcesObject:resource]; 
      [[self managedObjectContext] deleteObject:resource]; 
     } 
    } 
    else 
    { 
     if (resource) 
     { 
      [resource updateWithPresence:presence]; 
     } 
     else 
     { 
      XMPPResourceCoreDataStorageObject *newResource; 
      newResource = [XMPPResourceCoreDataStorageObject insertInManagedObjectContext:[self managedObjectContext] 
                     withPresence:presence 
                    streamBareJidStr:streamBareJidStr]; 

      [self addResourcesObject:newResource]; 
     } 
    } 

    [self recalculatePrimaryResource]; 
} 

的源代码,你可以看到resource如果将离线被删除。

对于我自己,我检查user.primaryResource?.presence?.type() == "available"online,其他情况为offline。 (假设用户是你从db获得的XMPPUserCoreDataStorageObject

相关问题