【问题标题】:NSFetchedResultsController loses his rows after entering backgroundNSFetchedResultsController 进入后台后丢失行数
【发布时间】:2012-09-27 08:55:07
【问题描述】:

我的应用有一个奇怪的问题。

我实例化了一个 NSFetchedResultsController 来填充我的数组。

它是这样声明的(作为 @propoerty (nonatomic, retain)

- (NSFetchedResultsController *)fetchedContactsController {
    if (self->fetchedContactsController != nil) return self->fetchedContactsController;

    // Create the fetch request
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

    // I want every contact...
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Contact" inManagedObjectContext:self->managedObjectContext];
    [fetchRequest setEntity:entity];

    // ... whose are not associated with my order item
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%@ IN items)", self.orderItem];
    [fetchRequest setPredicate:predicate];

    // Edit the section name key path and cache name if appropriate
    self.fetchedContactsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self->managedObjectContext sectionNameKeyPath:nil cacheName:nil];

    [aFetchedResultsController release];
    [firstnameSortDescriptor release];
    [lastnameSortDescriptor release];
    [sortDescriptors release];
    [fetchRequest release];

    // Execute the fetch request
    [self->fetchedContactsController performFetch:nil];
    return self->fetchedContactsController;
}

当然,contacts.items 存在。

当我的应用程序进入后台然后再次进入前台时,如果我再做一次

NSLog(@"before >>> %d", [[fetchedContactsController fetchedObjects]count]); // >>> 3
[self->fetchedContactsController performFetch:nil];
[tableView reloadData];
NSLog(@"after >>> %d", [[fetchedContactsController fetchedObjects]count]); // >>> 0

我的数组中的每一行都消失了!

编辑:

如果我评论这些行:

    // ... whose are not associated with my order item
    //NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%@ IN items)", self.orderItem];
    //[fetchRequest setPredicate:predicate];

问题不再发生!但这不是我想要的……

【问题讨论】:

    标签: ios nsfetchrequest nsfetchedresultscontroller


    【解决方案1】:

    好的,我找到了。 Thanks to this question,我替换了这一行:

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT (%@ IN items)", self.orderItem];
    

    通过

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"NOT SELF IN %@", self.orderItem.recipients];
    

    有趣的是,您提出问题的事实如何让您走上解决问题的道路。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多