gpt4 book ai didi

iphone - NSFetchedResultsChangeUpdate 被触发而不是 NSFetchedResultsChangeDelete

转载 作者:技术小花猫 更新时间:2023-10-29 11:25:24 24 4
gpt4 key购买 nike

我有一个以下列方式启动的 NSFetchedResultsController:

NSEntityDescription *myEntity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
[fetchRequest setEntity:myEntity];
[fetchRequest setFetchBatchSize:10];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]];

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES selector:@selector(caseInsensitiveCompare:)];

[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor, nil]];

myFetchedResults = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
myFetchedResults.delegate = self;
[myFetchedResults performFetch:nil];

一些事实:

  • wasDeleted 是 MyEntity 的一个 NSNumber 属性 (BOOL)

  • 如果我将此属性更新为 [NSNumber numberWithBool:YES],NSFetchedResultsControllerDelegate 会调用 didChangeObject 但触发 NSFetchedResultsChangeUpdate 而不是 NSFetchedResultsChangeDelete

  • 但是,如果我弹出 View 并再次初始化获取的结果 Controller ,则该对象不再存在,显示 [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"wasDeleted == %@", [NSNumber numberWithBool:NO]]]; 有效。

  • 在此 NSFetchedResultsChangeUpdate 之后,当调用 cellForRow 时,我打印 wasDeleted 并将其设置为 YES。

这里有什么问题吗?

(换句话说,如果对象仍然存在于上下文中但不符合谓词,则可以调用 NSFetchedResultsChangeDelete?)

最佳答案

当然是 changeUpdate 而不是 changeDelete。您只更新了一个值,并没有删除整个项目。如果您从数据库中删除该项目,它将调用 changeDelete。并且它不会在新的 init 之后显示,因为您的表正在根据此属性进行过滤。

您需要监听 NSFetchedResultsChangeUpdate 并在那里检查属性 wasDeleted 是否已更改。如果是这样,请根据您的需要更新您的表格 View ,例如。删除特定行。

关于iphone - NSFetchedResultsChangeUpdate 被触发而不是 NSFetchedResultsChangeDelete,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14690681/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com