使用 xmpp 获取 XMPPGroupCoreDataStorageObject,但 NSManagingContextDidSaveChangesNotification 似乎不起作用

Posted

技术标签:

【中文标题】使用 xmpp 获取 XMPPGroupCoreDataStorageObject,但 NSManagingContextDidSaveChangesNotification 似乎不起作用【英文标题】:fetch XMPPGroupCoreDataStorageObject using xmpp,but NSManagingContextDidSaveChangesNotification seems not work 【发布时间】:2011-11-15 07:12:23 【问题描述】:
- (NSFetchedResultsController *)fetchedGroupResultsController

    if (fetchedGroupResultsController == nil)
    
        NSManagedObjectContext *moc = [[self appDelegate] managedObjectContext_roster];


    NSEntityDescription *entity = [NSEntityDescription entityForName:@"XMPPGroupCoreDataStorageObject"
                                              inManagedObjectContext:moc];

    NSSortDescriptor *sd1 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
    //NSSortDescriptor *sd2 = [[NSSortDescriptor alloc] initWithKey:@"displayName" ascending:YES];

    NSArray *sortDescriptors = [NSArray arrayWithObjects:sd1, nil];

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:entity];
    [fetchRequest setSortDescriptors:sortDescriptors];
    [fetchRequest setFetchBatchSize:10];

    fetchedGroupResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
                                                                   managedObjectContext:moc
                                                                     sectionNameKeyPath:@"name"
                                                                              cacheName:nil];
    [fetchedGroupResultsController setDelegate:self];

    [sd1 release];
    //[sd2 release];
    [fetchRequest release];

    NSError *error = nil;
    if (![fetchedGroupResultsController performFetch:&error])
    
        NSLog(@"Error performing fetch: %@", error);
    



return fetchedGroupResultsController;

`

我使用这种方法来获取组结果并且它有效。但是当我的一个联系人在线或离线时, - (void)controllerDidChangeContent:(NSFetchedResultsController *)controller [[self tableView] reloadData]; 方法不会被调用,所以我的表格视图不会被重新加载,状态也不会被刷新。我很难过,谁能帮帮我?

【问题讨论】:

【参考方案1】:

我希望这仍然有用..

那是因为您获取的是 XMPPGroupCoreDataStorageObject,而不是 XMPPUserCoreDataStorageObject。每当有人在线或离线时,名册中的 XMPPUserCoreDataStorageObject 都会发生变化,因此

-(void)controllerDidChangeContent:(NSFetchedResultsController *)controller [[self tableView] reloadData];

将被调用。

尝试使用 XMPPUserCoreDataStorageObject 代替 XMPPGroupCoreDataStorageObject,你会看到不同。

【讨论】:

以上是关于使用 xmpp 获取 XMPPGroupCoreDataStorageObject,但 NSManagingContextDidSaveChangesNotification 似乎不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 strophe 获取在线用户列表 xmpp [关闭]

如何使用 python xmpppy 获取 XMPP 服务器中所有 MUC 的列表?

如何使用 xmpp jidstr iOS sdk 获取资源

使用 `xmpp` 和 `smack` 从 `vcard` 获取自定义元素

不使用持久化服务在后台获取 XMPP 消息

使用 XMPP - PEP/PubSub 获取传感器读数