Pull to refresh

Comments 14

Выглядит довольно удобно. А как у этой штуки с многопоточностью?
Для однопоточных приложений достаточно использовать один [NSManagedObjectContext defaultContext]. Если необходимо сделать NSManagedObjectContext для другого потока, то используйте NSManagedObjectContext *myNewContext = [NSManagedObjectContext newContext];
Чем больше работаю с CoreData тем больше понимаю что с ней лучше работать только в главном потоке (проблем становится на порядок меньше). Для того чтобы вернуть данные из другого потока (например при парсинге) можно вернуть из потока блок, который уже создаст нужные сущности. Для примера из статьи:
// в другом потоке
-(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 файла, добавленного в проект в качестве ресурса.

С последующей возможной модификацией и сохранением…
Как вы можете посмотреть вот тут, вызов
[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) Файл БД, добавленный в проект как ресурс, не будет доступен для модификации, так как будет находится в папке защищенной от записи.
Спасибо за статью!
Давно присматриваюсь к Core Data
Пример добавления библиотеки методом «drag-and-drop исходников» неверен и антипедагогичен.

Правильней было бы создать static library project, сделать «drag-and-drop исходников» в него. А потом включать в проект и линковать уже эту библиотеку.
>> #import «CoreData+ActiveRecordFetching.h»

Да. И импорты для сторонних библиотек желательно писать вот в таком стиле:
#import <ActiveRecordLibrary/CoreData+ActiveRecordFetching.h>
Как это дело работает с NSFetchResultsController? Можно ли их использовать вместе и если да то какие подводные камни?
Sign up to leave a comment.

Articles