使用谓词时,`NSFetchedResultsController`会在保存和不保存的情况下获取数据更改

Xyand

NSFetchedResultsCotroller使用谓词时,行为异常。以下代码显示输出:

Rows - 0

但是当我注释掉[self saveContext](第一个)时,输出变为:

Rows - 1

删除谓词(query.predicate)可以修复问题,并且输出始终为:

Rows - 1

我怀疑这NULL与内存与数据库查询中的比较方式有关。知道到底发生了什么吗?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    NSError *error;

    // Deletes persistent store coordinator behind the scene

    // Create an empty entity with the optional fields attr1 (string) and attr2 (date)
    Entity *e = [NSEntityDescription insertNewObjectForEntityForName:@"Entity" inManagedObjectContext:[self managedObjectContext]];
    [self saveContext]; // <---------------- Code to comment out

    // Setup fetched results controller
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(attr1 != %@) AND (attr2 != %@)", @"", [NSDate new], nil];

    NSFetchRequest *query = [[NSFetchRequest alloc] initWithEntityName:@"Entity"];
    query.predicate = pred;
    query.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"attr1" ascending:NO]];

    frc = [[NSFetchedResultsController alloc] initWithFetchRequest:query managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];
    frc.delegate = self;
    [frc performFetch:&error];

    // Output #1
    NSLog(@"Rows - %ld", frc.fetchedObjects.count);

    [self saveContext];

    return YES;
}

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
    NSLog(@"Rows - %ld (Update)", controller.fetchedObjects.count);
}

编辑

修改谓词似乎可以解决该问题。仍然不知道为什么:

    NSPredicate *pred = [NSPredicate predicateWithFormat:@"((attr1 = NULL) OR (attr1 != %@)) AND ((attr2 = NULL) OR (attr2 != %@))", @"", date];
蒙迪

是的,我怀疑这与您的谓词有关。我认为nil作为替换对象的行为是不可预测的。您可以使用NULLnil在格式字符串本身或代表空一个真正的对象,即[NSNull null]如果您尝试这样做,也许您的原始谓词也将起作用。

但是还有其他事情发生。也许您的实体有一些使谓词失败的默认值,这可以解释为什么在某些情况下保存会更改获取结果的原因。同样,还不清楚该saveContext方法的内容是什么

同样,不是这样[NSDate new]会产生精确到1/10000秒的日期,因此谓词的这一部分应始终返回true

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在不保存的情况下更改Java中图像的格式

来自分类Dev

PHP在不保存的情况下获取文件内容

来自分类Dev

Python要求:如何在不保存驱动器的情况下获取和发布图片?

来自分类Dev

在不保存的情况下更新关联

来自分类Dev

在不保存更改的情况下替换MongoDB集合中的字符。

来自分类Dev

在不保存的情况下获取PIL图像的二进制表示形式

来自分类Dev

在Android中,如何在不保存图像文件的情况下获取图像

来自分类Dev

如何在不保存/显示图像的情况下拍照

来自分类Dev

在不保存表的情况下对查询结果执行操作

来自分类Dev

Qt:在不保存的情况下捕获图像-QCameraImageCapture

来自分类Dev

Rails 4在不保存的情况下更新对象内容

来自分类Dev

如何在不保存的情况下使用字段来确定 Logstash 中的索引?

来自分类Dev

在禁用了“保存”提示并默认选择“不保存”的情况下,使用RED X关闭工作簿

来自分类Dev

Rails 4:在不保存到数据库的情况下追加到“ has_many”关系

来自分类Dev

如何在不保存的情况下更新尚未保存的对象?

来自分类Dev

熊猫和csv如何在不保存的情况下将csv创建为字符串

来自分类Dev

如何从在线来源解压缩文件,然后在不保存python的情况下使用它们

来自分类Dev

Lotus Notes:使用预填充字段创建新文档,在不保存的情况下以编辑方式打开

来自分类Dev

是否可以在不保存的情况下批量分配现有记录?

来自分类Dev

如何在不保存的情况下更新多个Firebase参考?

来自分类Dev

如何仅在不保存nodejs的情况下验证记录?sailsjs | 吃水线

来自分类Dev

如何在不保存的情况下用win32com退出Excel?

来自分类Dev

默认情况下,为什么matplotlib不保存整个图形?

来自分类Dev

如何在不保存图像的情况下将Numpy数组图像转换为JPEG?

来自分类Dev

如何在不保存到文件的情况下将条形码输出到QLabel?

来自分类Dev

在不保存到文件的情况下捕获pygraphviz图像渲染?

来自分类Dev

php / webstorm toogle自动测试在不保存文件的情况下被触发

来自分类Dev

如何在不保存现有记录的情况下修改其子/外键ID

来自分类Dev

如何在不保存文档的情况下从 Xpages 运行 LotusScript 代理

Related 相关文章

  1. 1

    在不保存的情况下更改Java中图像的格式

  2. 2

    PHP在不保存的情况下获取文件内容

  3. 3

    Python要求:如何在不保存驱动器的情况下获取和发布图片?

  4. 4

    在不保存的情况下更新关联

  5. 5

    在不保存更改的情况下替换MongoDB集合中的字符。

  6. 6

    在不保存的情况下获取PIL图像的二进制表示形式

  7. 7

    在Android中,如何在不保存图像文件的情况下获取图像

  8. 8

    如何在不保存/显示图像的情况下拍照

  9. 9

    在不保存表的情况下对查询结果执行操作

  10. 10

    Qt:在不保存的情况下捕获图像-QCameraImageCapture

  11. 11

    Rails 4在不保存的情况下更新对象内容

  12. 12

    如何在不保存的情况下使用字段来确定 Logstash 中的索引?

  13. 13

    在禁用了“保存”提示并默认选择“不保存”的情况下,使用RED X关闭工作簿

  14. 14

    Rails 4:在不保存到数据库的情况下追加到“ has_many”关系

  15. 15

    如何在不保存的情况下更新尚未保存的对象?

  16. 16

    熊猫和csv如何在不保存的情况下将csv创建为字符串

  17. 17

    如何从在线来源解压缩文件,然后在不保存python的情况下使用它们

  18. 18

    Lotus Notes:使用预填充字段创建新文档,在不保存的情况下以编辑方式打开

  19. 19

    是否可以在不保存的情况下批量分配现有记录?

  20. 20

    如何在不保存的情况下更新多个Firebase参考?

  21. 21

    如何仅在不保存nodejs的情况下验证记录?sailsjs | 吃水线

  22. 22

    如何在不保存的情况下用win32com退出Excel?

  23. 23

    默认情况下,为什么matplotlib不保存整个图形?

  24. 24

    如何在不保存图像的情况下将Numpy数组图像转换为JPEG?

  25. 25

    如何在不保存到文件的情况下将条形码输出到QLabel?

  26. 26

    在不保存到文件的情况下捕获pygraphviz图像渲染?

  27. 27

    php / webstorm toogle自动测试在不保存文件的情况下被触发

  28. 28

    如何在不保存现有记录的情况下修改其子/外键ID

  29. 29

    如何在不保存文档的情况下从 Xpages 运行 LotusScript 代理

热门标签

归档