Как стать автором
Обновить

Комментарии 48

Тема отличная. В рунете про Core Data написано очень и очень мало. Сам начинал читать эту книгу на английском, потом как-то забросил. Думаю, на русском будет куда проще воспринимать теоретическую информацию. Всячески поддерживаю перевод следующих разделов.
Благодарю за отзыв.
Я по-правде хочу не просто переводить, но и добавлять нечто интересное вроде «Знаете ли Вы?» и практической части. Хотелось бы сделать такой большой и полезный туториал по Core Data.
Спасибо огромное за статьи! Вы делаете хорошую работу, переводя книгу!
P.S. видел сей пост в песочнице, жаль не было инвайта.
Спасибо! Всегда приятно слышать, что твои труды кому-то нужны и работа проделана не в пустую.

P.S. Был заблокирован модератором до 25, думал блок снимут 25 и опубликовал в этот день, но увы… пост провисел в песочнице весь день, а потом магическим образом исчез, хотя я думал он будет автоматически опубликован. Благо я сохранил исходный код статьи.
Спасибо Вам! Не знал, что есть книга отдельно о Core Data. Есть ли там информация о том, как работать с Core Data из разных потоков?
Почитайте документацию, там все предельно ясно написано. С выходом iOS 5.0 SDK стало чуть чуть полегче, но есть ньюансы с производительностью.
Ну как, контексты разные создавать для каждого потока, и обмениваться не объектами а ObjectID. Остальное уже за вами.
Так и делаю, только работает это все как-то мутно. Вдруг в сей книге дадут вошебный паттерн? :-)
А в core data вообще много всего работает мутно и неочевидно. Плата за универсальность. Я не фанат, но по долгу службы использовать приходилось, и довольно много.
А что именно вам кажется мутным?
Например object faulting вызывает зубную боль.
Почему? Мне кажется это вполне логичным. Если попробуете в консоль вывести NSManagedObject, внутри которого будет ссылка на самого себя, вы же не ожидаете от компилятора бесконченого цикла вывода текста в консоль?
Как вам такой глюк: при обращении к свойству объекта если он fault, получаем nil, а иногда не nil а то, что нужно. Происходит абсолютно рандомно. Потратил несколько ночей чтобы найти костыль.
Хм, у меня такое было только когда были явные косяки с моей стороны.

Вы используете nested contexts stack, или два независимых контекста с общим persistent store coordinator?
Использовал два независимых контекста. Проблема была связана как раз с многопоточностью.
Ну если использовать оба контекста только через performBlock: и performBlockAndWait: (ну да, UI-контекст можно просто использовать в UI-потоке), проблем не должно быть. Можете поподробнее рассказать суть проблемы?
Приучаю себя пользовать GCD. :-)

Проблема такая (насколько помню по памяти, в исходнике искать долго):
Имеется такая иерархия Relationships где Conversations > Messages > User > Comments. То есть, крайняя сущность — это список комментариев пользователя. Приложение открывается по push-уведомлению и, если приложение было в фоне и получало didReceiveMemoryWarning, то при открытии окна с комментариями из профиля пользователя сразу после запуска приложения иногда возникал сплошной (null) (null) (null) вместо текста на контролах. Видимо, Core Data не успевал подгрузить свои внутренности.

Решил проблему так: использовал dispatch_async с задержкой 0.3 секунды (установлено эмпирическим путем). Вот такой некрасивый костыль.
Спасибо, буду готов к встрече с таким багом :)
Всегда пожалуйста! Опыт — сын ошибок трудных! :-)
Кстати, по поводу GCD у меня есть отличная книга, которую я всю перевел (а потом по глупости удалил с блогспота всё, может в кэше гугла что-то и осталось еще).
Если желаете, то могу после этой (Core Data) книги вновь перевести «Pro Multithreading...». А если хотите сами почитать — напишите в личку и я вышлю вам её в pdf формате.
image
Восхитительно!

Конечно желаю, да и хабрасообщество, думаю будет очень благодарным.

Кстати, я свободно владею английским, но все-равно русский вариант зачастую воспринимается гораздо лучше.
Ссылку в студию, или в личку.
Заранее огромное спасибо!!!
Спасибо еще раз!
Только хотел в комментарии про неё написать. Было бы чудесно иметь перевод такой книги.
Лучше использовать не GCD, а NSOperation. По рекомендации эппла кстати.
Как же так? Ведь GCD — это стильно, модно, молодежно. :-)

NSOperation высокоуровневая обертка вокруг него. Тут уже дело вкуса на самом деле.
На самом деле, когда сталкиваешься с тем что асинхронные операции нужно иногда отменять, понимаешь почему эппл рекомендует использовать NSOperation.
Вот тут Вы правы! Действительно, при помощи GCD-шных функций это можно сделать только «ручками».
Именно это я и имел в виду!
In general, you should use the highest level of abstraction that suits your needs. This means that you should usually use NSOperationQueue instead of GCD, unless you need to do something that NSOperationQueue doesn't support.

Извините за английский, но думаю вы его знаете неплохо. Предполагаю, что это так потому что код более читаем, и блоками же можно добавлять операции, почти как GCD получается.
на самом деле GCD может много, чего не может NSOperation, а NSOperation умеет отмену и приоритеты. Так что все зависит от задачи, нельзя так однозначно говорить.
Они и не говорят однозначно, они говорят ровно следующее — используйте NSOperation там, где можно использовать NSOperation, в остальных случаях используйте GCD напрямую.

Ну примерно как используйте Core Data для работы с базой, используйте чистый SQLite только там где это необходимо.
Согласен, но я отвечал на вот этот Ваш комментарий:

Лучше использовать не GCD, а NSOperation. По рекомендации эппла кстати.


Пояснили Вы уже потом.
Как на этот, когда он под тем, где я привел цитату из девелоперской документации.
А Вы стрелочку нажмите, ведущую к исходному комментарию.

Да, ответил раньше, чем прочитал цитату из документации, каюсь.
Это же очень прозрачно работает. Наверное единственное когда вам придется об этом задуматься это при использовании transient properties, а так же в случаях когда столкнетесь с необходимостью prefetching. Советую посмотреть видео WWDC начиная с 2010 года, касательно core data.
Спасибо за наводку, посмотрю обязательно.
Я уверен, что уважающий себя разработчик должен посмотреть их ВСЕ! :) Запасайтесь временем!
Вот времени как раз и не хватает… :-)
В списке много полезных книг и, все они со временем будут мною переведены.
image
Сейчас ещё пытаюсь осилить эту книгу. В принципе, написано довольно понятно, но на русском было бы ещё лучше :)
Премного благодарен :)
И Вам спасибо за отзыв!
Могу сказать одно — будет еще много чего и главное будет интересно (я постараюсь, чтобы так было), поэтому открыт любым пожеланиям по формату подачу информации, по каким-то рубрикам вроде «Знаете ли Вы?» (кстати решил сам добавить, не знаю насколько удалось и насколько вписывается сюда, интересно было бы услышать по этому поводу комментарии) и практическим заданиям, которые будут в ближайшее время.
Буквально сегодня утром на неё натыкался, в архивчик сохранил для последующего изучения.
Я был бы удивлен если бы книгу Marcus Zarra тут не упомянули — у меня сложилось ощущение что она самая рекомендуемая по Core Data.
Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.