Хорошо, чтобы сделать это, вы можете сделать это
User.findOne({ _id: req.user._id },(err,user)=>{
if(err) throw err;
user.FieldYouWantToUpdate = req.body.name // likewise add your values
// then save the document
user.save();
});
Здесь вы можете больше контролировать себя при обновлении с помощью mongoose. Что происходит, когда вы делаете запрос, используя идентификатор пользователя, и получаете пользователя. так что пользовательский объект может быть доступен в обратном вызове функции findOne (). После этого, используя пользовательский объект, вы можете изменять пользователя по своему желанию, может быть это одно поле, 2 поля, все поля, что вам нравится. Вы можете иметь полный контроль над обновлением
Я не думаю, что существует явное сообщение для этого, но Вы могли разделить на подклассы UINavigationController и переопределение - popViewControllerAnimated (хотя я не попробовал это передо мной).
, С другой стороны, при отсутствии других ссылок на контроллер представления, Вы могли бы добавить к - dealloc?
Я должен был также препятствовать иногда появляться, таким образом, лучший ответ для меня был записан Orkhan Alikhanov. Но это не работало, потому что делегат не был установлен, таким образом, я сделал окончательную версию:
import UIKit
class CustomActionsNavigationController: UINavigationController,
UIGestureRecognizerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
interactivePopGestureRecognizer?.delegate = self
}
override func popViewController(animated: Bool) -> UIViewController? {
if let delegate = topViewController as? CustomActionsNavigationControllerDelegate {
guard delegate.shouldPop() else { return nil }
}
return super.popViewController(animated: animated)
}
// important to prevent UI thread from freezing
//
// if popViewController is called by gesture recognizer and prevented by returning nil
// UI will freeze after calling super.popViewController
// so that, in order to solve the problem we should not return nil from popViewController
// we interrupt the call made by gesture recognizer to popViewController through
// returning false on gestureRecognizerShouldBegin
func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool {
if let delegate = topViewController as? CustomActionsNavigationControllerDelegate {
if !delegate.shouldPop() {
return false
}
}
// This if statement prevents navigation controller to pop when there is only one view controller
if viewControllers.count == 1 {
return false
}
return true
}
}
protocol CustomActionsNavigationControllerDelegate {
func shouldPop() -> Bool
}
ОБНОВЛЕНИЕ
я добавил viewControllers.count == 1
случай, потому что, если будет один контроллер в стеке, и пользователь делает жест, то заморозит UI Вашего приложения.
Возможно, Вы могли использовать navigationBar:shouldPopItem метод протокола UINavigationBarDelegate.
Можно наблюдать уведомление:
- (void)viewDidLoad{
[super viewDidLoad];
[NSNotificationCenter.defaultCenter addObserver:self selector:@selector(navigationControllerWillShowViewController:) name:@"UINavigationControllerWillShowViewControllerNotification" object:nil];
}
- (void)navigationControllerDidShowViewController:(NSNotification *)notification{
UIViewController *lastVisible = notification.userInfo[@"UINavigationControllerLastVisibleViewController"];
if(lastVisible == self){
// we are being popped
}
}
Вы можете поймать это здесь.
- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated {
if (viewController == YourAboutToAppearController) {
// do something
}
}
Это сработает непосредственно перед отображением нового вида. Никто еще не переехал. Я все время использую магию перед asinine NavigationController. Вы можете устанавливать заголовки и заголовки кнопок и делать там что угодно.
Это работает для меня.
- (void)viewDidDisappear:(BOOL)animated
{
if (self.parentViewController == nil) {
NSLog(@"viewDidDisappear doesn't have parent so it's been popped");
//release stuff here
} else {
NSLog(@"PersonViewController view just hidden");
}
}