Комментарии 48
Тема отличная. В рунете про Core Data написано очень и очень мало. Сам начинал читать эту книгу на английском, потом как-то забросил. Думаю, на русском будет куда проще воспринимать теоретическую информацию. Всячески поддерживаю перевод следующих разделов.
+1
Спасибо огромное за статьи! Вы делаете хорошую работу, переводя книгу!
P.S. видел сей пост в песочнице, жаль не было инвайта.
P.S. видел сей пост в песочнице, жаль не было инвайта.
+2
Спасибо! Всегда приятно слышать, что твои труды кому-то нужны и работа проделана не в пустую.
P.S. Был заблокирован модератором до 25, думал блок снимут 25 и опубликовал в этот день, но увы… пост провисел в песочнице весь день, а потом магическим образом исчез, хотя я думал он будет автоматически опубликован. Благо я сохранил исходный код статьи.
P.S. Был заблокирован модератором до 25, думал блок снимут 25 и опубликовал в этот день, но увы… пост провисел в песочнице весь день, а потом магическим образом исчез, хотя я думал он будет автоматически опубликован. Благо я сохранил исходный код статьи.
+1
Спасибо Вам! Не знал, что есть книга отдельно о Core Data. Есть ли там информация о том, как работать с Core Data из разных потоков?
0
Почитайте документацию, там все предельно ясно написано. С выходом iOS 5.0 SDK стало чуть чуть полегче, но есть ньюансы с производительностью.
0
Ну как, контексты разные создавать для каждого потока, и обмениваться не объектами а ObjectID. Остальное уже за вами.
0
Так и делаю, только работает это все как-то мутно. Вдруг в сей книге дадут вошебный паттерн? :-)
0
А в core data вообще много всего работает мутно и неочевидно. Плата за универсальность. Я не фанат, но по долгу службы использовать приходилось, и довольно много.
0
А что именно вам кажется мутным?
0
Например object faulting вызывает зубную боль.
0
Почему? Мне кажется это вполне логичным. Если попробуете в консоль вывести NSManagedObject, внутри которого будет ссылка на самого себя, вы же не ожидаете от компилятора бесконченого цикла вывода текста в консоль?
0
Как вам такой глюк: при обращении к свойству объекта если он fault, получаем nil, а иногда не nil а то, что нужно. Происходит абсолютно рандомно. Потратил несколько ночей чтобы найти костыль.
0
Хм, у меня такое было только когда были явные косяки с моей стороны.
Вы используете nested contexts stack, или два независимых контекста с общим persistent store coordinator?
Вы используете nested contexts stack, или два независимых контекста с общим persistent store coordinator?
+1
Использовал два независимых контекста. Проблема была связана как раз с многопоточностью.
0
Ну если использовать оба контекста только через performBlock: и performBlockAndWait: (ну да, UI-контекст можно просто использовать в UI-потоке), проблем не должно быть. Можете поподробнее рассказать суть проблемы?
0
Приучаю себя пользовать GCD. :-)
Проблема такая (насколько помню по памяти, в исходнике искать долго):
Имеется такая иерархия Relationships где Conversations > Messages > User > Comments. То есть, крайняя сущность — это список комментариев пользователя. Приложение открывается по push-уведомлению и, если приложение было в фоне и получало didReceiveMemoryWarning, то при открытии окна с комментариями из профиля пользователя сразу после запуска приложения иногда возникал сплошной (null) (null) (null) вместо текста на контролах. Видимо, Core Data не успевал подгрузить свои внутренности.
Решил проблему так: использовал dispatch_async с задержкой 0.3 секунды (установлено эмпирическим путем). Вот такой некрасивый костыль.
Проблема такая (насколько помню по памяти, в исходнике искать долго):
Имеется такая иерархия Relationships где Conversations > Messages > User > Comments. То есть, крайняя сущность — это список комментариев пользователя. Приложение открывается по push-уведомлению и, если приложение было в фоне и получало didReceiveMemoryWarning, то при открытии окна с комментариями из профиля пользователя сразу после запуска приложения иногда возникал сплошной (null) (null) (null) вместо текста на контролах. Видимо, Core Data не успевал подгрузить свои внутренности.
Решил проблему так: использовал dispatch_async с задержкой 0.3 секунды (установлено эмпирическим путем). Вот такой некрасивый костыль.
+1
Спасибо, буду готов к встрече с таким багом :)
0
Кстати, по поводу GCD у меня есть отличная книга, которую я всю перевел (а потом по глупости удалил с блогспота всё, может в кэше гугла что-то и осталось еще).
Если желаете, то могу после этой (Core Data) книги вновь перевести «Pro Multithreading...». А если хотите сами почитать — напишите в личку и я вышлю вам её в pdf формате.
![image](https://habrastorage.org/r/w1560/getpro/habr/comment_images/d77/8a0/9d3/d778a09d36ed2c4c0c30597c31116606.png)
Если желаете, то могу после этой (Core Data) книги вновь перевести «Pro Multithreading...». А если хотите сами почитать — напишите в личку и я вышлю вам её в pdf формате.
![image](https://habrastorage.org/getpro/habr/comment_images/d77/8a0/9d3/d778a09d36ed2c4c0c30597c31116606.png)
+1
Восхитительно!
Конечно желаю, да и хабрасообщество, думаю будет очень благодарным.
Кстати, я свободно владею английским, но все-равно русский вариант зачастую воспринимается гораздо лучше.
Конечно желаю, да и хабрасообщество, думаю будет очень благодарным.
Кстати, я свободно владею английским, но все-равно русский вариант зачастую воспринимается гораздо лучше.
+1
Ссылку в студию, или в личку.
Заранее огромное спасибо!!!
Заранее огромное спасибо!!!
0
Только хотел в комментарии про неё написать. Было бы чудесно иметь перевод такой книги.
0
Лучше использовать не GCD, а NSOperation. По рекомендации эппла кстати.
0
Как же так? Ведь GCD — это стильно, модно, молодежно. :-)
NSOperation высокоуровневая обертка вокруг него. Тут уже дело вкуса на самом деле.
NSOperation высокоуровневая обертка вокруг него. Тут уже дело вкуса на самом деле.
0
На самом деле, когда сталкиваешься с тем что асинхронные операции нужно иногда отменять, понимаешь почему эппл рекомендует использовать NSOperation.
+2
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 получается.
0
на самом деле GCD может много, чего не может NSOperation, а NSOperation умеет отмену и приоритеты. Так что все зависит от задачи, нельзя так однозначно говорить.
0
Они и не говорят однозначно, они говорят ровно следующее — используйте NSOperation там, где можно использовать NSOperation, в остальных случаях используйте GCD напрямую.
Ну примерно как используйте Core Data для работы с базой, используйте чистый SQLite только там где это необходимо.
Ну примерно как используйте Core Data для работы с базой, используйте чистый SQLite только там где это необходимо.
0
Это же очень прозрачно работает. Наверное единственное когда вам придется об этом задуматься это при использовании transient properties, а так же в случаях когда столкнетесь с необходимостью prefetching. Советую посмотреть видео WWDC начиная с 2010 года, касательно core data.
0
В списке много полезных книг и, все они со временем будут мною переведены.
0
![image](https://habrastorage.org/getpro/habr/comment_images/871/079/d50/871079d50439b3b41beb2d485dc36df7.jpg)
Сейчас ещё пытаюсь осилить эту книгу. В принципе, написано довольно понятно, но на русском было бы ещё лучше :)
0
Есть простенький «аналог»
maleevdimka.files.wordpress.com/2013/04/ios-patterns-cliff-notes2.pdf
maleevdimka.files.wordpress.com/2013/04/ios-patterns-cliff-notes2.pdf
0
И Вам спасибо за отзыв!
Могу сказать одно — будет еще много чего и главное будет интересно (я постараюсь, чтобы так было), поэтому открыт любым пожеланиям по формату подачу информации, по каким-то рубрикам вроде «Знаете ли Вы?» (кстати решил сам добавить, не знаю насколько удалось и насколько вписывается сюда, интересно было бы услышать по этому поводу комментарии) и практическим заданиям, которые будут в ближайшее время.
Могу сказать одно — будет еще много чего и главное будет интересно (я постараюсь, чтобы так было), поэтому открыт любым пожеланиям по формату подачу информации, по каким-то рубрикам вроде «Знаете ли Вы?» (кстати решил сам добавить, не знаю насколько удалось и насколько вписывается сюда, интересно было бы услышать по этому поводу комментарии) и практическим заданиям, которые будут в ближайшее время.
0
Есть ещё одна отличная книга: Core Data: Core Data (2nd edition): Data Storage and Management for iOS, OS X, and iCloud от Marcus S. Zarra. Рекомендую.
+2
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Core Data для iOS. Глава №1. Теоретическая часть