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 AMOSTRAA 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 PERGUNTAEu 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"]