用户退出应用程序时的数据持久性

时间:2013-03-14 18:52:44

标签: ios objective-c

我正在处理一个包含两个表视图控制器和一个“详细信息”视图的应用程序,以编辑第二个表视图的单元格中的内容。 segues用于在两个表视图控制器之间导航。当在第二个表中编辑对象并返回上一个表时,编辑将保存在那里,但是当我在第二个表中并重新启动应用程序时,应用程序不会保存,尽管编辑发生时上下文通过save:函数。注意:第一个表视图中的实体与第二个表的实体具有一对多的关系。

1 个答案:

答案 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