Mini App of coreData for store student information, multi-threading in core data.
MARK: - fatalError() vs assertionFailure() vs preconditionfailure()
fatalError() -> for exiting a program, Unconditionally prints a given message and stops execution.
assertionFailure() -> for testing, Indicates that an internal sanity check failed.
preconditionFailure() -> for testing, when checking the precondition, Indicates that a precondition was violated.
1. Using assert() and assertionFailure()
To verify that a certain condition is true. Per default, this causes a fatal error in debug builds, while being ignored in release builds. It’s therefor not guaranteed that execution will stop if an assert is triggered, so it’s kind of like a severe runtime warning.
2. Using precondition() and preconditionFailure() instead of asserts.
The key difference is that these are always* evaluated, even in release builds. That means that you have a guarantee that execution will never continue if the condition isn’t met.
3. Calling fatalError()
— which you have probably seen in Xcode-generated implementations of init(coder:) when subclassing an NSCoding-conforming system class, such as UIViewController. Calling this directly kills your process.
1. Display a list of Students from the Database
2. There should be a way to save Student record in the Database
3. There should be a way to update Student record in the Database
4. There should be a way to delete Student record in the Database
5. Follow good UI/UX
6. using NSFetchedResultsController, NSSortDescriptor, searchBar, and some small things
1. fix bugs -> delete multiple objects, can not create same id, optimize code
1. add search bar scope
2. coreData manager
3. save image data to core data
4. optimized the code
1. add filter with sliding menu
2. add sort with picker view
3. coreData light migration
4. multi-entities
CoreData Concurrency
1. mainQueueType
2. privateQueueType
3. perform() & performAndWait()
4.......