Рефакторинг основных данных - PullRequest
0 голосов
/ 25 января 2011

Привет Обычно все методы, такие как

'- (NSFetchedResultsController *) fetchedResultsController'

размещены в коде контроллеров представления. Я нахожу это немного грязным, когда пишу код Data Fetching вместе с методами жизненного цикла или методами делегатов таблиц. Итак, я хочу реорганизовать методы CoreData в какой-нибудь другой вспомогательный класс, скажем DataLoader, и затем вызвать их в контроллерах представления? Это неправильно или я потеряю некоторые преимущества кодирования Core Data.

Ответы [ 2 ]

1 голос
/ 25 января 2011

Я бы сказал, что перемещение fetchedResultsController во вспомогательный класс - хорошая идея. Проблема, с которой я часто сталкиваюсь, заключается в правильном написании атрибутов.

Например, я делаю предикат и хочу отфильтровать атрибут @"isSelected". Компилятор и компоновщик не проверяют строку isSelected. Мне придется перепроверить каждую строку, где строка была использована.

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

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

Для предикатов сохраненные шаблоны существуют, поэтому предикаты не являются идеальным примером. Но подумайте о value forKey:, и мы на первом месте.

Теперь, если все fetchedResultsController находятся в одном файле, проверка станет проще. По крайней мере, это уменьшает вероятность пропуска этой маленькой орфографической ошибки в далеком и редко используемом классе.

... или я потеряю некоторые преимущества кодирования в методах Core Data.

Я склонен сказать нет, но другие, пожалуйста, не стесняйтесь прыгать.

0 голосов
/ 25 января 2011

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

Надеюсь, ты понял!

...