我正在处理一个包含两个表视图控制器和一个“详细信息”视图的应用程序,以编辑第二个表视图的单元格中的内容。 segues用于在两个表视图控制器之间导航。当在第二个表中编辑对象并返回上一个表时,编辑将保存在那里,但是当我在第二个表中并重新启动应用程序时,应用程序不会保存,尽管编辑发生时上下文通过save:函数。注意:第一个表视图中的实体与第二个表的实体具有一对多的关系。
答案 0 :(得分:0)
如果用户希望在编辑时保存编辑(而不是仅在点击“保存”按钮后),那么您有几个选项:
您可以简单地将tableViewController设置为detailViewController的委托,并使用在detailViewController视图上发生的事件(即UITextFieldDelegate等)保存编辑内容。
但是,在先前的设置中保持相同的委托模式可能会更好,但只有在用户退出detailViewController视图或关闭应用程序时才调用save函数。
以下内容可能有效。
<强> TableViewController.h 强>
#import <UIKit/UIKit.h>
#import "DetailViewController.h"
@interface TableViewController : UITableViewController <DetailViewControllerDelegate>
@end
<强> TableViewController.m 强>
#import "TableViewController.h"
@interface TableViewController ()
@end
@implementation TableViewController
- (void)editObject:(MyManagedObject *)object {
DetailViewController *detailVC = [DetailViewController new];
detailVC.myObject = object;
detailVC.delegate = self;
[self.navigationController pushViewController:detailVC animated:YES];
}
- (void)detailViewControllerDidFinishWithObject:(id)object {
// Your saving functions
}
@end
<强> DetailViewController.h 强>
#import <UIKit/UIKit.h>
@protocol DetailViewControllerDelegate;
@interface DetailViewController : UIViewController
@property (nonatomic, weak) id <DetailViewControllerDelegate>delegate;
@property (nonatomic, strong) MyManagedObject *myObject;
@end
@protocol DetailViewControllerDelegate <NSObject>
- (void)detailViewControllerDidFinishWithObject:(MyManagedObject *)object;
@end
<强> DetailViewController.m 强>
#import "DetailViewController.h"
@interface DetailViewController ()
@end
@implementation DetailViewController
@synthesize delegate;
@synthesize myObject;
- (void)viewDidLoad {
[super viewDidLoad];
// Do your normal view loading things
// Register a notification to know the app will terminate
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(applicationWillResignActive:)
name: UIApplicationWillResignActiveNotification
object:[UIApplication sharedApplication]];
}
- (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[delegate detailViewControllerDidFinishWithObject:myObject];
}
- (void)applicationWillResignActive:(NSNotification *)notification {
[delegate detailViewControllerDidFinishWithObject:myObject];
}
@end