Должен ли я использовать FetchedResultsController для объектов в постоянно обновляемых отношениях? - PullRequest
0 голосов
/ 18 апреля 2011

У меня есть простая модель Coredata с одной сущностью, называемой «разговор», а другая - «сообщения».По сути, мне нужно как-то воспроизвести смс-приложение для iPhone.

У меня отношение один к одному от сообщения к разговору и ко многим от разговора к сообщениям.

Conversation{
    messages<-->>Message.conversation
}

Message{
    conversation<<-->Conversation.messages
}

Каждый раз, когда я запускаю свое приложение, все мои разговоры загружаются в мой fetchedResultsController,Если я правильно понял, как работает Coredata, поскольку у меня есть отношения, все сообщения, связанные с моим разговором, также будут загружены, верно?Я установил размер пакета, чтобы не загружать все свои разговоры одновременно.

Мое приложение подключено к серверу с помощью длинного запроса на извлечение, поэтому я могу получить сообщение с сервера по адресув любое время (будет добавлено в coredata, а затем я использую NSNotification, чтобы сообщить своим представлениям, что что-то добавляется).

МОЯ проблема заключается в следующем: когда я выбираю строку, я помещаю другое представление в стек, так что ямогу видеть мои сообщения.Мне было интересно, как это сделать, и вот почему:

• Я мог бы передать на мой взгляд мой NSSet сообщений, передаваемых через отношения, верно?однако, как я могу получить сообщение, глядя на это представление, как мне обновить NSSet, переданный представлению?

• Я мог бы также использовать другой fetchedresultController в этом представлении, но в этом случае я быбудет загружать все мои сообщения в моем предыдущем просмотре без причины?Могу ли я сказать coredata не загружать их в моем предыдущем представлении?

Надеюсь, это было достаточно ясно.Я немного отчаялся и знаю, что на этом сайте есть какой-то эксперт.Дайте мне знать, если вам понадобится что-нибудь еще, я постараюсь предоставить больше информации как можно скорее.

1 Ответ

5 голосов
/ 18 апреля 2011

Если я правильно понял, как Coredata работает, так как у меня есть отношения, каждый сообщения, связанные с моим разговором также будет загружен правильно?

Сами объекты Message не загружаются, пока вы не запросите связь. До тех пор они не более чем просто ошибки (призрачные заполнители.)

Обычно вы просто передаете объект Conversation, выбранный пользователем в первой таблице. Во втором контроллере таблицы вы должны запросить у этого объекта Conversation связанные сообщения. Затем вы бы отсортировали их в массив для отображения.

Однако, если у вас есть обстоятельства, при которых отношение messages постоянно обновляется новыми объектами Message, вы можете использовать NSFetchedResultsController (FRC) только потому, что вы получаете все автоматические уведомления о недавно обновленных Message объектов.

Чтобы сделать это, вы должны передать объект Conversation, как указано выше, а затем использовать его в предикате для FRC следующим образом:

NSPredicate *p=[NSPredicate predicateWithFormat:@"conversation==%@",passedConversationObject];

Затем реализуйте методы делегата FRC как обычно.

Конечно, вы можете просто зарегистрировать второй контроллер табличного представления для NSManagedObjectContextObjectsDidChangeNotification из контекста и обрабатывать все это напрямую, но для новичка FRC может быть проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...