Туториалы
23 ноября 2015
ШП
Туториалы
23 ноября 2015
Шпаргалка по Core Data для Swift разработчиков на iOS
Помните ли вы, как происходят основные операции в Core Data? Эта шпаргалка является удобной памяткой для того, чтобы вы с пользой владели Core Data и Swift!
Фрагменты кода, представленные ниже, помогут вам растормошить вашу память, если вы какое-то время не работали с Core Data. Также они могут быть полезными для начинающих разработчиков на iOS, Core Data, и Swift.
Думаю, что вы уже создали подклассы NSManagedObject для сущностей и их более легкого использования по типобезопасному способу.
Запросы
Получение всех сущностей
// Предполагаем, что тип имеет ссылку на контекст
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
do {
let fetchedEntities = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [MyEntity]
// что-либо делаем с fetchedEntities
} catch {
// что-то делаем в зависимости от ошибки
}
Получаем N объектов сущности
// Предполагаем, что тип имеет ссылку на контекст
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
fetchRequest.fetchLimit = 10
do {
let fetchedEntities = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [MyEntity]
// что-либо делаем с fetchedEntities
} catch {
// что-то делаем в зависимости от ошибки
}
Добавляем новую сущность
// Предполагаем, что тип имеет ссылку на контекст
let newEntity = NSEntityDescription.insertNewObjectForEntityForName("MyEntity", inManagedObjectContext: self.managedObjectContext) as! MyEntity
// устанавливаем свойства
do {
try self.managedObjectContext.save()
} catch {
// что-то делаем в зависимости от ошибки
}
Обновляем сущность
// Предполагаем, что тип имеет ссылку на контекст
// Предполагаем, что свойство objectIDFromNSManagedObject объекта NSManagedObject доступно
// Как вариант, вы можете выставить выражение предиката,
// которое является достаточно точным, чтобы иметь возможность выбрать только одну сущность
let predicate = NSPredicate(format: "objectID == %@", objectIDFromNSManagedObject)
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
fetchRequest.predicate = predicate
do {
let fetchedEntities = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [MyEntity]
fetchedEntities.first?.FirstPropertyToUpdate = NewValue
fetchedEntities.first?.SecondPropertyToUpdate = NewValue
// ... Обновляем новые свойства с новыми значениями
} catch {
// что-то делаем в зависимости от ошибки
}
do {
try self.managedObjectContext.save()
} catch {
// что-то делаем в зависимости от ошибки
}
Обновляем сразу несколько сущностей
// Предполагаем, что тип имеет ссылку на контекст
let predicate = NSPredicate(format: "MyEntityAttribute == %@", "Matching Value")
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
fetchRequest.predicate = predicate
do {
let fetchedEntities = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [MyEntity]
for entity in fetchedEntities {
entity.FirstPropertyToUpdate = NewValue
entity.SecondPropertyToUpdate = NewValue
// ... Обновляем новые свойства с новыми значениями
}
} catch {
// что-то делаем в зависимости от ошибки
}
do {
try self.managedObjectContext.save()
} catch {
// что-то делаем в зависимости от ошибки
}
Удаляем сущность
// Предполагаем, что тип имеет ссылку на контекст
// Предполагаем, что свойство objectIDFromNSManagedObject объекта NSManagedObject доступно
// Как вариант, вы можете выставить выражение предиката,
// которое является достаточно точным, чтобы иметь возможность выбрать только одну сущность
let predicate = NSPredicate(format: "objectID == %@", objectIDFromNSManagedObject)
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
fetchRequest.predicate = predicate
do {
let fetchedEntities = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [MyEntity]
if let entityToDelete = fetchedEntities.first {
self.managedObjectContext.deleteObject(entityToDelete)
}
} catch {
// что-то делаем в зависимости от ошибки
}
do {
try self.managedObjectContext.save()
} catch {
// что-то делаем в зависимости от ошибки
}
Удаляем несколько сущностей
// Предполагаем, что тип имеет ссылку на контекст
let predicate = NSPredicate(format: "MyEntityAttribute == %@", "Matching Value")
let fetchRequest = NSFetchRequest(entityName: "MyEntity")
fetchRequest.predicate = predicate
do {
let fetchedEntities = try self.managedObjectContext.executeFetchRequest(fetchRequest) as! [MyEntity]
for entity in fetchedEntities {
self.managedObjectContext.deleteObject(entity)
}
} catch {
// что-то делаем в зависимости от ошибки
}
do {
try self.managedObjectContext.save()
} catch {
// что-то делаем в зависимости от ошибки
}
Урок подготовил: Акулов Иван
Чтобы добавить комментарий, авторизуйтесь
Войти