0

アプリで奇妙な問題が発生しました。

をインスタンス化し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];

問題はもう発生しません!しかし、それは私が望むものではありません...

4

1 に答える 1

0

わかりました。この質問のおかげで、次の行を置き換えました。

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

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

質問をすることで、解決への道が開けるというのは面白いことです。

于 2012-09-27T09:31:10.750 に答える