Pobrane właściwości - Predykat

Mam pytanie dotyczące używania pobranych właściwości wewnątrz NSPredicate (patrz poniżej „Moje pytanie”). Nie chodzi o predykat, aby pobrać pobraną właściwość. Dla wyjaśnienia i dla innych, którzy również mogą napotkać ten problem, próbowałem zrobić mały przykładowy projekt.

PRZYKŁADOWY PROJEKT

Pojawiła się potrzeba korzystania z pobranych właściwości, ponieważ moja aplikacja została odrzucona z powodu naruszenia wytycznych dotyczących przechowywania danych iOS. WQA1719 piszą:

Aplikacje powinny unikać mieszania danych aplikacji i danych użytkownika w tym samym pliku.

Myślę, że może to być konieczne dla łatwiejszej synchronizacji ICloud i może również pomóc w migracji.

Jak to zrobić?

Użyłem wstępnie załadowanej bazy danych sqlite, którą skopiowałem ze ścieżki pakietu przy pierwszym uruchomieniu i użyłem do zapisania zmian użytkownika. Ponieważ nie powinieneś łączyć wstępnie załadowanych danych i danych użytkownika, próbuję je rozdzielić.

Główny problem polega na tym, że nie można utrzymywać relacji w różnych sklepach (Relacje między sklepami).

Nie znalazłem jeszcze próbki do projektu Fetched Property, więc staram się stworzyć własną.

Dla próbki jest:

wstępnie załadowana lista książek (w próbce, którą „wczytujesz” ikoną Plus), która jest przechowywana w trwałym sklepie Books.sqlite isposób na uczynienie książek ulubionymi. Jest to przechowywane w trwałym sklepie UserData.sqlite.

Podmioty to:

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

Entity „Books” to PreloadedData, „Favorite” powinno zawierać UserData.

Ulubiony tag to tylko przykład, może to być również Notatka wykonana przez użytkownika (dostępny Predykat do Notatki) lub jeśli książka jest wypożyczona komuś innemu ...

W moim xcdatamodeld (Edytor Xcode) dodałem dwie konfiguracje (PreloadStore, UserStore). Każda zawiera tylko potrzebną jednostkę.

Są używane z (wszystko inne jest z płyty):

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

Zrobiłem pobraną właściwość link_favorite w książkach z predykatem

books_title == $FETCH_SOURCE.title

Przykładowy projekt może byćpobranetutaj. Działa, z wyjątkiem predykatu (filtruj według ulubionych książek).

MOJE PYTANIE

Chciałbym przefiltrować moje pobranie w Książkach tylko tymi książkami, które są ulubione. Próbowałem użyć

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

wMasterViewController.m (fetchedResultsController), ale to tylko prowadzi do awarii.

Myślę, że muszę coś użyćjak tutaj z COUNT lub SUBQUERY, ale nie mogłem tego zrozumieć.

Z góry dziękuje za twoją pomoc!

--edytować:

Zrobiłem proste pobieranie NSArray (Core Data), tutaj działa:

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

Ale jak mam to przetłumaczyć w SUBQUERY dla NSFetchedResultsController (wypróbowałem ten artykuł na blogu)? Źle jest:

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

questionAnswers(2)

yourAnswerToTheQuestion