Propriedades buscadas - Predicado

Eu tenho uma pergunta sobre o uso de propriedades buscadas dentro de um NSPredicate (veja abaixo 'Minha pergunta'). Não é sobre o predicado para obter a propriedade buscada. Para esclarecimento e para outros, que também podem enfrentar este problema, tentei fazer um pequeno projeto de amostra.

PROJETO DE AMOSTRA

A necessidade de usar o Fetched Properties veio porque meu aplicativo foi rejeitado por violar as Diretrizes de armazenamento de dados do iOS. EmQA1719 eles escrevem:

Os aplicativos devem evitar a mistura de dados do aplicativo e dados do usuário no mesmo arquivo.

Acho que isso pode ser necessário para facilitar a sincronização do ICloud e também pode ajudar na migração.

Então, como fazer isso?

Eu usei um banco de dados sqlite pré-carregado, que copiei do caminho do pacote no primeiro lançamento e usei para salvar as edições do usuário. Como você não deve misturar dados pré-carregados e de usuário, estou tentando separá-los.

O principal problema é que não é possível ter relações entre diferentes lojas (Relacionamentos entre lojas).

Eu não encontrei uma amostra para um projeto de propriedade Fetched ainda, então estou aqui tentando fazer o meu próprio.

Para a amostra há:

uma lista de livros pré-carregados (na amostra, você os pré-carrega com o ícone do Plus) que é armazenado no armazenamento persistente Books.sqlite euma maneira de fazer livros seus favoritos. Isso é armazenado no armazenamento persistente UserData.sqlite.

As entidades são:

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

Entidade 'Books' é para PreloadedData, 'Favorite' deve conter UserData.

O Tag de Favoritos é apenas um exemplo, também pode ser Notas feitas pelo usuário (Predicado para Nota disponível) ou se o livro for alugado para outra pessoa ...

No meu xcdatamodeld (Xcode Editor) eu adicionei duas configurações (PreloadStore, UserStore). Cada um contém apenas a entidade necessária.

Eles são usados ​​com (tudo é outro é de clichê):

- (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]) {

Fiz uma propriedade buscada link_favorite em Books with the Predicate

books_title == $FETCH_SOURCE.title

O projeto de amostra pode serbaixadoAqui. Está funcionando, exceto pelo predicado (filtrar por livros favoritos).

MINHA PERGUNTA

Eu gostaria de filtrar minha busca no Books apenas por esses livros, que são favoritos. Eu tentei usar

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

emMasterViewController.m (fetchedResultsController), mas isso só leva a uma falha.

Acho que devo usar alguma coisacomo aqui com um COUNT ou um SUBQUERY, mas não consegui descobrir.

Agradeço antecipadamente por sua ajuda!

--editar:

Eu fiz uma simples busca NSArray (Core Data), aqui está o seguinte:

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

Mas como faço para traduzir isso em um SUBQUERY para o NSFetchedResultsController (tentei este artigo do blog) Errado é:

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

questionAnswers(2)

yourAnswerToTheQuestion