获取的属性 - 谓语(Fetched Properties - Predicate)

2019-06-25 08:51发布

我有一个关于使用NSPredicate内获取性的问题(见下文“我的问题”)。 这不是谓词来获取获取财产。 为了澄清和他人,这也可能面临这个问题,我试图让一个小样本项目。

示例工程

使用撷取的特性需要来了,因为我的应用程序,是因为违反了iOS的数据存储准则的拒绝。 在QA1719他们写道:

应用程序应避免在同一文件交融的应用数据和用户数据。

我想,这可能是必要的,方便的iCloud同步,也可以帮助迁移。

那么,如何才能做到这一点?

我用了一个预装的SQLite数据库,这是我从束路径复制在第一次发射和用于保存用户编辑。 因为你不应该混合预加载和用户数据,我想它们分开。

主要的问题是,它是不可能有跨越不同的商店(关系跨商店关系 )。

我还没有找到已取得的房地产项目的样本还,所以我在这里试图让我自己。

对于样品有:

  1. 书预加载列表(样品你“预加载”他们的加号图标中)存储在持久存储Books.sqlite和
  2. 一种方法,使书你最喜欢的。 这是存储在持久性存储UserData.sqlite。

该实体是:

--------------                --------------
|   Books    |                |   Favorite |
--------------                --------------
- author                      - favorite
- title        --- 1 : 1 ---  - books_title

实体“图书”是PreloadedData,“收藏”应包含的UserData。

收藏夹,标签只是一个例子,也可能是用户所做的附注(谓语可用注),或者如果这本书是出租给别人?

在我xcdatamodeld(Xcode的编辑器)我已经添加了两个配置(PreloadStore,UserStore)。 每一只包含包含实体需要。

它们与使用(一切都是别人为样板):

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
...
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"PreloadStore" URL:storeURL options:nil error:&error]) {
...
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:@"UserStore" URL:storeURLUserData options:nil error:&error]) {

我在书中做了一个牵强财产link_favorite与谓词

books_title == $FETCH_SOURCE.title

示例项目可以下载在这里 。 它的工作,除了谓词(由喜欢的书过滤器)。

我的问题

我想,以滤除只有那些书,这是我最喜欢的书籍中获取。 我试着使用

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"favorite_link.favorite == 1"];

MasterViewController.m (fetchedResultsController),但这只会导致崩溃。

我想,我必须用的东西喜欢这里了COUNT或子查询,但我无法弄清楚。

在此先感谢您的帮助!

- 编辑:

我做了一个简单的NSArray取(核心数据),这里的下面是工作:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY link_favorite.favorite == 1"];
result = [result filteredArrayUsingPredicate:predicate];

但是,如何在我的NSFetchedResultsController(子查询翻译此尝试这个博客文章 )? 错的是:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(contents, $x, $x.link_favorite.favorite == 1).@count > 0"]

Answer 1:

我用了一个预装的SQLite数据库,这是我从束路径复制在第一次发射和用于保存用户编辑。

有没有错,航运与预加载的数据本身。 你应该只推出一款JSON文件中的包和初始应用程序加载,解析它,并将其导入到核心数据。 这将简化你想要做什么,也不会反感苹果。 如果你这样做你的问题的其余部分变得无关紧要。 不止一种方法去做一件事。

此外,有没有你最喜欢做自己的实体理由吗? 为什么你就不能创建名为“isFavorite”这本书实体布尔?



Answer 2:

子查询需要,我们没有在这里的关系。 所以在我看来,这不会工作。 你可以切换你fetchedResultsController实体检索您通过获取属性需要将相关书籍对象中的数据。 如果为了节省时间,你可以(为你做的话)存储最为相关的数据,为您在tableview中你最喜欢的对象中显示和检索仅当用户选择单元格额外的数据,你进入一个详细视图。



文章来源: Fetched Properties - Predicate