         }
     }
     
+    /**
+    Save context and recursively save all parent contexts
+    
+    :param: context
+    :param: error
+    
+    :returns: true if success
+    */
     func save(context: NSManagedObjectContext?, error: NSErrorPointer) -> Bool {
         if let context = context {
             if context.hasChanges {

    
    :param: context
    */
    func recursiveSave(context: NSManagedObjectContext?, error: NSErrorPointer) {
        if let parentContext = context?.parentContext {
            parentContext.performBlock({ () -> Void in
                if parentContext.save(error) {

        }
    }
    
    /**
    Delete all managed objects using predicate
    
    :param: entityName
    :param: predicate
    :param: context
    :param: error
    */
    func delete(#entityName: String, predicate: NSPredicate? = nil, context: NSManagedObjectContext, error: NSErrorPointer) {
        if let objects = read(entityName, predicate: predicate, context: context, error: error) as? [NSManagedObject] {
            for object: NSManagedObject in objects {
