Полученные свойства - предикат
У меня есть вопрос об использовании извлеченных свойств внутри NSPredicate (см. Ниже «Мой вопрос»). Речь идет не о предикате для получения извлеченного свойства. Для разъяснения и для других, которые также могут столкнуться с этой проблемой, я попытался сделать небольшой пример проекта.
SAMPLE PROJECTПотребность использовать Fetched Properties возникла, потому что мое приложение было отклонено из-за нарушения Руководства по хранению данных iOS. ВQA1719 они пишут:
Apps should avoid mingling app data and user data in the same file.
Я думаю, что это может быть необходимо для более легкой синхронизации ICloud, а также может помочь в миграции.
Итак, как это сделать?
Я использовал предварительно загруженную базу данных sqlite, которую я скопировал из пути к пакету при первом запуске и использовал для сохранения пользовательских изменений. Поскольку вы не должны смешивать предварительно загруженные и пользовательские данные, я пытаюсь разделить их.
Основная проблема заключается в том, что отношения между разными магазинами невозможны (Отношения между магазинами).
Я еще не нашел образец для проекта «Собранная недвижимость», поэтому я пытаюсь сделать свой собственный.
Для образца есть:
a preloaded list of books (in the sample you 'preload' them with the Plus Icon) which is stored in the persistent store Books.sqlite and a way to make books your favorite ones. This is stored in the persistent store UserData.sqlite.Объектами являются:
-------------- --------------
| Books | | Favorite |
-------------- --------------
- author - favorite
- title --- 1 : 1 --- - books_title
Entity "Книги" предназначен для PreloadedData, 'a Favourite' должен содержать UserData.
The Favorite-Tag is just an example, it may also be User made Notes (Predicate for Note available) or if the book is rented to somebody else...
В моем xcdatamodeld (Xcode Editor) я добавил две конфигурации (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
Пример проекта может бытьdownloaded Вот, Он работает, за исключением предиката (фильтр по избранным книгам).
MY QUESTIONЯ хотел бы отфильтровать мои выборки в Книгах только по тем книгам, которые являются любимыми. Я пытался с помощью
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"favorite_link.favorite == 1"];
вMasterViewController.m
(fetchedResultsController), но это только приводит к сбою.
Я думаю, что я должен использовать что-токак здесь с COUNT или SUBQUERY, но я не могу понять это.
Заранее спасибо за помощь!
--edit:
Я сделал простую выборку NSArray (Core Data), здесь работает следующее:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY link_favorite.favorite == 1"];
result = [result filteredArrayUsingPredicate:predicate];
Но как мне перевести это в SUBQUERY для NSFetchedResultsController (попробовал эту статью в блоге)? Неправильно это:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SUBQUERY(contents, $x, $x.link_favorite.favorite == 1).@count > 0"]