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