1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dehengxu-CoreDataEnvirSample

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
README_zh.md 6.6 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 25.11.2024 04:41 86b259a

CoreDataEnvir (since 2011-05-25) последняя версия 0.4

CoreDataEnvir — это оболочка CoreData-фреймворка. Она предоставляет простой способ использования CoreData и обеспечивает поддержку безопасности потоков для параллельного программирования. Вы можете запускать отдельный экземпляр на каждом потоке для параллельной работы.

Первый шаг:

Регистрация имени файла вашей базы данных:

[CoreDataEnvir registDatabaseFileName:@"db.sqlite"];

Регистрация имени вашего файла модели (без расширения файла):

[CoreDataEnvir registModelFileName:@"SampleModel"];

Простое взаимодействие с базой данных:

Предположим, что класс Book в вашем приложении представляет объект книги. У него есть некоторые атрибуты, такие как name, author и другие. Также есть автор по имени «Джон Стефен», который написал книгу «Наполеон».

Добавление новой записи:


[Book insertItemWithFillingBlock:^(id item) {
item.name = @"Джон Стефен";
item.author = @"Наполеон";
}];

Запрос группы записей:

//Запрос книг, написанных Джоном Стефеном
NSArray *books= [Feed itemsWithFormat:@"author = %@",  @"Джон Стефен"];

Поиск одной записи:

//Поиск книги «Наполеон», написанной Джоном Стефеном
Book *book = [Book lastItemWithFormat:@"name = %@ && author = %@", @"Наполеон", @"Джон Стефен"];

Удаление одной записи:

[CoreDataEnvir asyncMainInBlock:^(CoreDataEnvir *db) {
[db deleteDataItem:book];
}];

Удаление группы записей:

[CoreDataEnvir asyncMainInBlock:^(CoreDataEnvir *db) {
[db deleteDataItemSet:books];
}];

Параллельное программирование:

В основном потоке:

Вы можете выполнять лёгкие операции в основном потоке, но лучше не влиять на реакцию пользовательского интерфейса. Все операции с данными, описанные выше, должны выполняться в основном потоке. В противном случае CoreDataEnvir автоматически вызовет исключение. Поэтому вам следует быть внимательным при использовании этого фреймворка, если вы не уверены, является ли текущий поток основным, можно сделать следующее:

  • Вы также можете явно использовать CoreDataEnvir в основном потоке: Это позволит вам чувствовать себя более уверенно:
[CoreDataEnvir asyncMainInBlock:^(CoreDataEnvir *db) {
[Book insertItemWithFillingBlock:^(id item) {
item.name = @"Наполеон";
item.author = @"Джон Стефен";
}];
}];

На фоновом потоке:

CoreDataEnvir также предоставляет фоновый GCD-очередь для вашего использования. Block asyncBackgroundInBlock будет автоматически сохранять изменения в базе данных после завершения вызова void(^)(CoreDataEnvir *db). Вам не нужно вызывать [db saveDataBase] напрямую, как в старых версиях.


[CoreDataEnvir asyncBackgroundInBlock:^(CoreDataEnvir *db) {
[Book insertItemOnBackgroundWithFillingBlock:^(id item) {
item.name = @"Наполеон";
item.author = @"Джон Стефен";
}];
}];

Таким образом, использование CoreData становится более удобным в параллельном программировании.

Несколько быстрых методов:

Должны выполняться в основной GCD-очереди:

  • + (void)asyncMainInBlock:(void(^)(CoreDataEnvir *db))CoreDataBlock;
  • + (id)insertItemWithFillingBlock:(void(^)(id item))fillingBlock;
  • + (NSArray *)itemsWithFormat:(NSString *)fmt,...; ...

Должны выполняться в фоновой GCD-очереди. Вы можете использовать API, содержащие Background в названии:

  • + (void)asyncBackgroundInBlock:(void(^)(CoreDataEnvir *db))CoreDataBlock;
  • + (id)insertItemOnBackgroundWithFillingBlock:(void(^)(id item))fillingBlock;
  • + (NSArray *)itemsOnBackgroundWithFormat:(NSString *)fmt,...; ...

Или вы можете выбрать выполнение в собственной GCD-очереди, используя следующие API:

  • + (CoreDataEnvir *)createInstance; рекомендуется сохранить этот экземпляр для будущего использования.
  • - (void)asyncInBlock:(void(^)(CoreDataEnvir *db))CoreDataBlock;

Если вы новичок в CoreData, соблюдайте следующие правила:

  • Если вы планируете использовать свои NSManagedObject-объекты в будущем, не освобождайте объект CoreDataEnvir, иначе все модели объектов станут недействительными.

  • При работе с базой данных в многопоточной среде убедитесь, что каждый поток имеет свой собственный NSManagedObjectContext-объект.

PS: В CoreDataEnvir убедитесь, что ваши NSManagedObject-объекты получены из основного потока через [CoreDataEnvir mainInstance] или из фонового потока через [CoreDataEnvir backgroundInstance]. Эти два объекта не будут освобождены, обычно CoreDataEnvir предоставляет два потока, которые могут справиться с обычными параллельными ситуациями.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dehengxu-CoreDataEnvirSample.git
git@api.gitlife.ru:oschina-mirror/dehengxu-CoreDataEnvirSample.git
oschina-mirror
dehengxu-CoreDataEnvirSample
dehengxu-CoreDataEnvirSample
master