【问题标题】:fetch XMPPGroupCoreDataStorageObject using xmpp,but NSManagingContextDidSaveChangesNotification seems not work使用 xmpp 获取 XMPPGroupCoreDataStorageObject,但 NSManagingContextDidSaveChangesNotification 似乎不起作用
【发布时间】: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]; } 方法不会被调用,所以我的表格视图不会被重新加载,状态也不会被刷新。我很难过,谁能帮帮我?

【问题讨论】:

    标签: iphone objective-c xmpp


    【解决方案1】:

    我希望这仍然有用..

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

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

    将被调用。

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

    【讨论】:

      猜你喜欢
      • 2020-07-30
      • 1970-01-01
      • 1970-01-01
      • 2020-09-23
      • 2018-09-14
      • 1970-01-01
      • 2017-07-31
      • 2020-06-28
      • 2021-07-19
      相关资源
      最近更新 更多