Skip to content

sapgv/SwiftCoreData

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

73 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SwiftCoreData

Version License Platform

SwiftCoreData is a library to manage CoreDataStack

Features

  • Fetch
  • Delete
  • Save
  • Batch delete / Batch update
  • FetchController

Example App

Installation

To run the example project, clone the repo, and run pod install from the Example directory first.

SwiftCoreData is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod 'SwiftCoreData'

Usage

Fetch

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

let persons = coreDataStack
                .fetchRequest(CDPerson.self)
                .fetch(inContext: context)

for person in persons {
  //use person
  let name = person.name
  ...

}

FetchOne

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

let person: CDPerson? = coreDataStack
                .fetchRequest(CDPerson.self)
                .predicate(NSPredicate(format: "age == %i", 5)) //optionally
                .fetchOne(inContext: context)

let name = person?.name

FetchCount

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

let count: Int = coreDataStack
                .fetchRequestCount(CDPerson.self)
                .predicate(NSPredicate(format: "age == %i", 5)) //optionally
                .fetchCount(inContext: context)

Save

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

let cdPerson = CDPerson(context: context)
cdPerson.name = "User name"
cdPerson.age = 10
  
coreDataStack.save(inContext: context) { result: SaveResult in
  if let error = result.error {
    //Handle error
  }
}

Delete

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

coreDataStack.deleteRequest(CDPerson.self)
              .predicate(NSPredicate(format: "age == %i", 5)) //optionally
              .delete(inContext: context) { error in
                //Handle error
            }

or

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

let person: CDPerson = ... //some CDPerson or any NSManagedObject

context.delete(person)

coreDataStack.save(inContext: context) { result: SaveResult in
  if let error = result.error {
    //Handle error
  }
}

or

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

coreDataStack.batchDeleteRequest(CDPerson.self)
            .predicate(NSPredicate(format: "age == %i", Int16(0))) //optionally
            .merge(into: [viewContext]) //optionally
            .delete(inContext: privateContext) { error in
                //Handle error
            }

Update

let coreDataStack = CoreDataStack(modelName: "NameOfModel")

coreDataStack.batchUpdateRequest(CDPerson.self)
            .propertiesToUpdate(["name": "new username"])
            .predicate(NSPredicate(format: "age == %i", Int16(0))) //optionally
            .merge(into: [viewContext]) //optionally
            .update(inContext: privateContext) { error in
                //Handle error
            }

FetchController

let fetchController = FetchController(
            CDPerson.self,
            context: viewContext,
            sortDescriptors: [NSSortDescriptor(keyPath: \CDPerson.age, ascending: true)], //required sortDescriptors
            sectionNameKeyPath: nil, //optionally
            cacheName: nil //optionally
        )

fetchController.performFetch()
tableView.reloadData()

Author

Grigory Sapogov, grisha.sapgv@mail.ru

License

SwiftCoreData is available under the MIT license. See the LICENSE file for more info.

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors