XMPPFramework - 如何获得离线用户配置文件状态
问题描述:
我想脱机用户(朋友)状态:XMPPFramework - 如何获得离线用户配置文件状态
我的代码工作正常时,用户在线,所以我得到用户状态,但是当他进入脱机user.primaryResource.presence.status
给值为nil
。
XMPPUserCoreDataStorageObject *user = [[self fetchedResultsController] objectAtIndexPath:indexPath];
NSLog(@"Status: %@",user.primaryResource.presence.status);
用户后下线我检查XMPPResourceCoreDataStorageObject
表特别jidStr
当用户下线其删除该用户的ResourcesObject它给我零对象表示。
因此,有可能获得该用户的状态。
答
您检查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
)
按你指定的状态,用户是在线还是离线?如果是,那么如果'presense'给你零这不是说用户是'离线'? –
状态表示在XMPPResourceCoreDataStorageObject - > object - > primaryResource中保存的存在状态,因此,当用户脱机时,XMPPResourceCoreDataStorageObject对象变为零。 –
你有没有试用XMPPRosterCoreDataStorage? – dichen