Комментарии 14
Выглядит довольно удобно. А как у этой штуки с многопоточностью?
Для однопоточных приложений достаточно использовать один [NSManagedObjectContext defaultContext]. Если необходимо сделать NSManagedObjectContext для другого потока, то используйте NSManagedObjectContext *myNewContext = [NSManagedObjectContext newContext];
Чем больше работаю с CoreData тем больше понимаю что с ней лучше работать только в главном потоке (проблем становится на порядок меньше). Для того чтобы вернуть данные из другого потока (например при парсинге) можно вернуть из потока блок, который уже создаст нужные сущности. Для примера из статьи:
// в другом потоке
А уже этот блок вызвать из MainThread
// в другом потоке
-(BlockType)createSongGeneratorWithName:(NSString*)name{
return ^{
Song *song = [Song createEntity];
song.name = "stairway to heaven";
return song;
}
}
А уже этот блок вызвать из MainThread
я как тольо начал рабоатть с Core Data написал нечто подобное, потом когда столкнулся с многопоточностью добавил и поддержку контекста на поток ) вещь нужная
Думаю что-то подобное сделал каждый, кто работал с CoreData, само собой напрашивается.
Спасибо. Вы привели все типичные случаи для ActiveRecord for Core Data — insert, delete, update.
У меня дилетанский вопрос — как научить ActiveRecord читать данные из sqlite файла, добавленного в проект в качестве ресурса.
С последующей возможной модификацией и сохранением…
У меня дилетанский вопрос — как научить ActiveRecord читать данные из sqlite файла, добавленного в проект в качестве ресурса.
С последующей возможной модификацией и сохранением…
Как вы можете посмотреть вот тут, вызов
сводится к вызову
где в качестве параметра указан storeURL. Советую вместо «MyProject.sqlite» указать имя вашей базы. Если не сработает — поэксперементируйте с параметром URL:(NSURL *)storeURL. Возможно стоит самому добавить метод в ActiveRecord, который будет принимать параметр URL к вашему ресурсу-базе.
[ActiveRecordHelpers setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"MyProject.sqlite"];
сводится к вызову
- (NSPersistentStore *)addPersistentStoreWithType:(NSString *)storeType configuration:(NSString *)configuration URL:(NSURL *)storeURL options:(NSDictionary *)options error:(NSError **)error
где в качестве параметра указан storeURL. Советую вместо «MyProject.sqlite» указать имя вашей базы. Если не сработает — поэксперементируйте с параметром URL:(NSURL *)storeURL. Возможно стоит самому добавить метод в ActiveRecord, который будет принимать параметр URL к вашему ресурсу-базе.
Отблагодарил как мог. Настораживает правда фраза — если не сработает).
Имею наглость просить Вас провести эксперимент (задача ведь самая нужная и типичная), а мы серые воспользуемся приложением к вашей статье.
Имею наглость просить Вас провести эксперимент (задача ведь самая нужная и типичная), а мы серые воспользуемся приложением к вашей статье.
Только есть пара важных моментов
1) Ваша база должна быть создана с использованием CoreData. Так как любой файл SQLite не может быть прочитан в CoreData, нужно описание графа объектов в нем хранящихся
2) Файл БД, добавленный в проект как ресурс, не будет доступен для модификации, так как будет находится в папке защищенной от записи.
1) Ваша база должна быть создана с использованием CoreData. Так как любой файл SQLite не может быть прочитан в CoreData, нужно описание графа объектов в нем хранящихся
2) Файл БД, добавленный в проект как ресурс, не будет доступен для модификации, так как будет находится в папке защищенной от записи.
Спасибо за статью!
Давно присматриваюсь к Core Data
Давно присматриваюсь к Core Data
Пример добавления библиотеки методом «drag-and-drop исходников» неверен и антипедагогичен.
Правильней было бы создать static library project, сделать «drag-and-drop исходников» в него. А потом включать в проект и линковать уже эту библиотеку.
Правильней было бы создать static library project, сделать «drag-and-drop исходников» в него. А потом включать в проект и линковать уже эту библиотеку.
Ссылка на страничку проекта устарела. Вот актуальная github.com/magicalpanda/MagicalRecord
Как это дело работает с NSFetchResultsController? Можно ли их использовать вместе и если да то какие подводные камни?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Использование ActiveRecord для работы с Core Data