-1

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

4

1 回答 1

0

如果用户希望编辑在进行时保存(而不是仅在单击“保存”按钮后),那么您有几个选项:

您可以简单地将您的tableViewController 设置为您的detailViewController 的委托,并保存使用发生在detailViewController 视图(即UITextFieldDelegate 等)上的事件进行的编辑。

不过,在之前的设置中保持相同的委托模式可能会更好,但仅在用户退出 detailViewController 视图或关闭应用程序时调用 save 函数。

像下面这样的东西可以工作。

表视图控制器.h

#import <UIKit/UIKit.h>
#import "DetailViewController.h"

@interface TableViewController : UITableViewController <DetailViewControllerDelegate>

@end

.

表视图控制器.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

.

细节视图控制器.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
于 2013-03-14T21:31:50.407 回答