Базовые данные: предикат для к - много отношений

У меня есть модель CoreData с 4 объектами.

Образцовый снимок экрана-> http://img96.imageshack.us/img96/7857/screenshot20100209at182.png

Состояние

- StateName

Местоположение:

- locationName (атрибут)

- locationDescription

- locationActivities (relatinship)

- состояние (отношения)

LocationActivities:

- местоположение (отношения)

- действие (отношения)

Операции

- activityName (атрибут)

- locationsActivities (отношения)

Как я могу записать запрос, который выбирает все Местоположения, которые имеют

(действие = 'Гольф' ИЛИ действие = 'Плавающий') И состояние = 'LA'

6
задан TechZen 10 February 2010 в 13:20
поделиться

3 ответа

Я только что заметил, что на вашем снимке экрана ваша LocationActivities сущность на самом деле написана как LocationActivity (обратите внимание на отсутствующую букву "c").

Этого достаточно, чтобы разрушить ваш график. Любой предикат, который ищет LocationActivities, не сработает.

Такие ошибки заставляют меня ненавидеть программирование. Кажется, я трачу больше времени на отслеживание опечаток, чем на исправление ошибок проектирования.

1
ответ дан 17 December 2019 в 04:46
поделиться

Я могу подтвердить, что решение, предоставленное Janosch, работает почти правильно.

В моем случае я должен был использовать испанские символы: á, é, í, ó, ú, ñ, Á, É, Í, Ó, Ú и попробованный его решение без результатов, пока я не собрал свой файл с xelatex вместо pdflatex.

В любом случае, вы должны изменить listings.sty либо в вашей локальной копии, либо непосредственно в общем файле и добавить следующее:

\lst@CCPutMacro
    \lst@ProcessOther {"23}\#
    \lst@ProcessLetter{"24}\textdollar
    \lst@ProcessOther {"25}\%
    \lst@ProcessOther {"26}\&
        %spanish letters coded in UTF
    \lst@ProcessOther {"E1}{\'a}
    \lst@ProcessOther {"C1}{\'A}
    \lst@ProcessOther {"E9}{\'e}
    \lst@ProcessOther {"C9}{\'E}
    \lst@ProcessOther {"ED}{\'i}
    \lst@ProcessOther {"CD}{\'I}
    \lst@ProcessOther {"F3}{\'o}
    \lst@ProcessOther {"D3}{\'O}
    \lst@ProcessOther {"FA}{\'u}
    \lst@ProcessOther {"DA}{\'U}
    \lst@ProcessOther {"F1}{ñ}
    \lst@ProcessOther {"D1}{Ñ}

В моем файле .tex я использовал следующие параметры для объявлений:

\usepackage{listingsutf8}
\lstset{
        inputencoding=utf8,
        extendedchars=\true}

Надеюсь, это может помочь кому угодно и, возможно, мы можем построить listing.sty, содержащий почти каждый UTF8 char...:)

-121--918487-

Из документов.

detachNewThreadSelector: toTarget: wityObject:

Объекты aTarget и anArgument: сохраненные во время выполнения отсоединенную нить, затем освобожденную. отсоединенный поток выходит (с помощью метод класса выхода) сразу после aTarget завершило выполнение aSelector способ.

Поэтому вам не нужно стараться. Autorelease здесь в порядке, и вы не должны сохранять его в потоке, так как сам поток сохраняет аргумент и цель, и выпустит его, когда это будет сделано.

-121--4950610-

Кроме того, необходимо перестать думать о таблицах и запросах для основных данных. В Core Data эти особенности только постоянного хранилища sqlite, и вы никогда не видите их и не имеете с ними дело.

Сущности не являются таблицами, а отношения не являются связывающими таблицами. Попытка врезать объектную модель в SQL в голове приведет вас к горю, потому что Core Data не работает как SQL.

-1
ответ дан 17 December 2019 в 04:46
поделиться
// With some NSManagedObjectContext *moc
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"Location"
                               inManagedObjectContext:moc]];
[request setPredicate:[NSPredicate predicateWithFormat:
                       @"(locationActivities.activity.activityName == %@ OR 
                          locationActivities.activity.activityName == %@) AND 
                         state.stateName == %@",
                       @"Golf", @"Swimming", @"LA"]];
NSError *error;
NSArray *results = [moc executeFetchRequest:request error:&error];

В основном, выполните выборку основных данных как обычно, а затем создайте соответствующий предикат для фильтрации результатов (как описано в Руководстве по программированию предикатов ).

5
ответ дан 17 December 2019 в 04:46
поделиться