2010-08-04 3 views
0

У меня есть вопрос о Core Data. Когда я запускаю свое приложение, когда мои данные (которые автоматически сохраняются с помощью Core Data) загружаются в NSArrayControllers? Я хочу изменить его, прежде чем пользователь сможет взаимодействовать с ним.Основные данные: когда и где объекты, загруженные в первое место?

Чтобы уточнить: у меня есть NSArrayController для списка воспроизведения. Прежде чем пользователь сможет добавлять новые плейлисты или вообще взаимодействовать с ним, я хочу программно изменить плейлисты. Я пробовал windowControllerDidLoadNib: в своем NSPersistentDocument (MyDocument.m) и awakeFromNib как в моем NSPersistendDocument, так и в NSArrayController, но когда я проверяю эти методы с помощью [[myArrayController arrangedObjects] count], я получаю 0 как результат (содержимое контроллера массива пуст).

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

Благодарим за помощь.

ответ

1

Данные никогда не «загружаются» в NSArrayController. Контроллер массива не является массивом. Он не содержит или не хранит данные.

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

Если вы хотите изменить существующее хранилище перед его отображением в пользовательском интерфейсе, вам необходимо обработать данные до контроллера массива используемый пользовательским интерфейсом, даже инициализирован. Если вы используете NSPersistentDocument, вы можете переопределить readFromURL:ofType:error: для извлечения и изменения всех ваших объектов при первом открытии документа. В качестве альтернативы вы можете переопределить методы или showWindow оконного контроллера.

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

+0

Спасибо вам большое! Теперь я признаю, что мне нужно получить управляемые объекты, которые мне нужно изменить заранее. Это именно то, что я хотел знать, и теперь это работает для меня! Благодарю. – Core

0

Вы можете попробовать наблюдать за путём управления «организованными объектами» контроллера и добавить некоторую логику для работы, которую ваш контроллер массива был заполнен в первый раз.

Другой возможный крючок реализует методы awakeFromInsert/awakeFromFetch для ваших управляемых объектов.

 Смежные вопросы

  • Нет связанных вопросов^_^