Вопрос по iphone, core-data, objective-c, fetched-property, nspredicate – Полученные свойства - предикат

1

У меня есть вопрос об использовании извлеченных свойств внутри 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)[email protected] > 0"]
Есть ли шанс, что вы сможете обновить ссылку на ваш пример проекта? joneswah
Вы когда-нибудь выясняли, как заставить это работать? У меня похожая проблема с кросс-магазином и извлеченным свойством.stackoverflow.com/questions/16391255/… Gujamin

Ваш Ответ

2   ответа
0

which I copied from the bundle path at first launch and used to save user edits.

Нет ничего плохого в доставке с предварительно загруженными данными как таковыми. Вероятно, вам следует просто отправить JSON-файл в комплекте и при начальной загрузке приложения, проанализировать его и импортировать в Core Data. Это упростит то, что вы пытаетесь сделать, и не будет нежелательным для Apple. Остальная часть вашего вопроса становится неактуальной, если вы это сделаете. Существует более одного способа сделать это.

Кроме того, есть ли причина, по которой вы делаете Favorite своей собственной сущностью? Почему вы не можете просто создать объект bool для объекта книги под названием «isFavorite»?

Спасибо за ответ !; Я думаю, что раньше все было в порядке. Теперь это уже не так: приложения должны избегать смешения данных приложений и данных пользователей в одном файле. (QA1719, ; Конечно, образец не совсем мое приложение. В настоящее время я использую какое-то любимое целочисленное поле в Книжном объекте (оно также будет работать с отношениями). Я также сохраняю другие поля. Но я хотел бы отделить вещи (также для icloud). Это просто для понимания принципа (для меня и, возможно, для других). Остальная часть примера работает, отсутствует только предикат :( Thomas T
0

которых у нас здесь нет. Так что это не будет работать на мой взгляд. Вы можете переключить объект в вашем fetchedResultsController для извлечения нужных вам данных через свойство fetched в связанный объект books. Если вы хотите сэкономить время, вы можете (как вы это уже делаете) хранить наиболее релевантные данные для отображения в табличном представлении в вашем любимом объекте и извлекать дополнительные данные только в том случае, если пользователь выбирает ячейку и вы переходите в подробный вид.

Похожие вопросы