-
-
Notifications
You must be signed in to change notification settings - Fork 259
Logging and error handling
John Estropia edited this page Jun 2, 2015
·
3 revisions
One unfortunate thing when using some third-party libraries is that they usually pollute the console with their own logging mechanisms. CoreStore provides it's own default logging class, but you can plug-in your own favorite logger by implementing the CoreStoreLogger protocol.
final class MyLogger: CoreStoreLogger {
func log(#level: LogLevel, message: String, fileName: StaticString, lineNumber: Int, functionName: StaticString) {
// pass to your logger
}
func handleError(#error: NSError, message: String, fileName: StaticString, lineNumber: Int, functionName: StaticString) {
// pass to your logger
}
func assert(@autoclosure condition: () -> Bool, message: String, fileName: StaticString, lineNumber: Int, functionName: StaticString) {
// pass to your logger
}
}Then pass an instance of this class to CoreStore:
CoreStore.logger = MyLogger()Doing so channels all logging calls to your logger.
Note that to keep the call stack information intact, all calls to these methods are not thread-managed. Thus you have to make sure that your logger is thread-safe or you may otherwise have to dispatch your logging implementation to a serial queue.
CoreStore provides type-safe wrappers for observing managed objects:
-
ManagedObjectController: use to observe changes to a singleNSManagedObjectinstance (instead of Key-Value Observing) -
ManagedObjectListController: use to observe changes to a list ofNSManagedObjectinstances (instead ofNSFetchedResultsController)