Проектное введение
Данный фреймворк в основном решает проблему локального сохранения данных в процессе разработки для Apple. На начальном этапе разработки был выбран SQLite, и с тех пор разработчики не хотят использовать CoreData, возможно, потому что считают его менее удобным. Однако люди часто бывают упрямы. Не будем тратить время на пустые разговоры, давайте сразу перейдём к обзору методов.
Обзор методов
Методы использования В этой части мы не будем подробно объяснять каждый метод. Вместо этого мы рассмотрим две ситуации, которые часто возникают при сохранении объектов в реальном проекте: объекты без связей и объекты с отношениями.
Объекты без связей Давайте рассмотрим пример кода для сохранения объекта без связей:
// NoRelationshipObject.h
#import "DPDBObject.h"
@interface NoRelationshipObject : DPDBObject {
NSString *desc;
NSInteger aNumber;
int aInt;
float aFloat;
double aDouble;
}
@property (nonatomic, strong) NSString *desc;
@property (nonatomic, assign) NSInteger aNumber;
@property (nonatomic, assign) int aInt;
@property (nonatomic, assign) float aFloat;
@property (nonatomic, assign) double aDouble;
@end
Здесь мы объявляем объект NoRelationshipObject, который не имеет связей с другими объектами. Чтобы сохранить этот объект в базе данных, мы можем сделать следующее:
NoRelationshipObject *nrObject = [[NoRelationshipObject alloc] init];
nrObject.desc = @"Это тестовый объект без связей";
noObject.aInt = 2012;
// Игнорируем другие свойства
[noObject save];
Чтобы проверить, успешно ли сохранён объект в базе данных, можно открыть базу данных и убедиться, что запись существует.
Один к одному Теперь создадим новый класс OneToOneObject:
// OneToOneObject.h
#import "DPDBObject.h"
@interface OneToOneObject : DPDBObject {
NSString *desc;
NoRelationshipObject *nrObject;
}
@property (nonatomic, strong) NSString *desc;
@property (nonatomic, strong) NoRelationshipObject *nrObject;
@end
Затем создаём экземпляр класса OneToOneObject и присваиваем ему значение:
OneToOneObject *otoObject = [[OneToOneObject alloc] init];
otoObject.desc = @"Тестовый объект один к одному";
otoObject.nrObject = nrObject;
[otoObject save];
После выполнения этих действий объект будет успешно сохранён в базе данных. Для проверки можно получить первичный ключ объекта и использовать его для поиска в базе данных:
NSInteger pk = [otoObject pk];
OneToOneObject *object = [OneToOneObject queryByPk:pk];
if (object) {
// Можно поставить точку останова или написать код для проверки
} else {
NSLog(@"Проверка не удалась, объект не сохранен");
}
На этом всё. Далее рассмотрим сохранение объектов один ко многим.
Один ко многим Сохранение объектов один к одному и без связей было относительно простым. Сохранение объектов один ко многим может быть более сложным. Мы рассмотрели несколько подходов, включая динамическое определение типа, управление конфигурацией и использование имён для определения типов. В итоге мы отказались от некоторых идей из-за различных проблем.
Вместо того чтобы подробно описывать все эти подходы, мы просто покажем код для сохранения объектов один ко многим:
// OneToManyObject.h
#import "DPFBObject.h"
@interface OneToManyObject : DPFBObject {
NSString *desc;
NSArray *nrArrs;
}
@property (nonatomic, strong) NSString *desc;
@property (nonatomic, strong) NSArray *nrArrs;
@end
Класс OneToManyObject имеет свойство nrArrs, которое представляет собой массив объектов NoRelationshipObject. Поскольку невозможно явно указать тип элементов массива в Objective-C, как в Java, нам нужно определить тип элементов в методе collectionTypeInfo:
// OneToManyObject.m
#import "OneToManyObject.h"
@implementation OneToManyObject
+ (NSDictionary *)collectionTypeInfo {
return @{
@"nrArrs": NSStringFromClass([NoRelationshipObject class])
};
}
Этот метод возвращает словарь, где ключ nrArrs указывает на класс NoRelationshipObject. Теперь мы можем использовать этот класс для создания и сохранения объектов:
OneToManyObject *otmObject = [[OneToManyObject alloc] init];
NSMutableArray *objects = [NSMutableArray array];
for (NSInteger i = 0; i < 10; i++) {
NoRelationshipObject *nrObject = [[NoRelationshipObject alloc] init];
nrObject.desc = [NSString stringWithFormat:@"Тестовый объект без связей-%ld", (long)i];
[objects addObject:nrObject];
}
otmObject.nrArrs = objects;
[otmObject save];
Мы создали массив объектов NoRelationshipObject и присвоили его свойству nrArrs объекта OneToManyObject. Затем мы сохранили объект OneToManyObject в базе данных.
Для проверки сохранения можно использовать тот же подход, что и для объектов один к одному.
Применимость Фреймворк ещё не завершён и имеет некоторые ограничения:
Ссылки и благодарности Этот фреймворк основан на идеях из проекта sqliteobjectpersistence. Автор выражает благодарность автору этого проекта за вдохновение и идеи.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )