2017-06-27 44 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