2番目のテーブルビューのセルにあるものを編集するために、2つのテーブルビューコントローラーと1つの「詳細」ビューを含むアプリケーションを扱っています。seguesは、2つのテーブルビューコントローラー間を移動するために使用されます。オブジェクトが2番目のテーブルで編集されて前のテーブルに戻ると、編集はそこに保存されますが、2番目のテーブルにいてアプリを再起動すると、編集が発生するとコンテキストは保存されますが、アプリは保存されません。 save:関数を実行します。注:最初のテーブルビューのエンティティは、2番目のテーブルのエンティティと1対多の関係にあります。
質問する
59 次
1 に答える
0
編集が行われたときに([保存]ボタンをクリックした後だけではなく)ユーザーが編集を保存することを期待する必要がある場合は、いくつかのオプションがあります。
tableViewControllerをdetailViewControllerのデリゲートとして設定し、detailViewControllerビューで発生するイベント(UITextFieldDelegateなど)を使用して行われた編集を保存するだけです。
ただし、前の設定で同じデリゲートパターンを維持する方がよい場合がありますが、ユーザーがdetailViewControllerビューを終了するとき、またはアプリを閉じるときにのみ、保存関数を呼び出します。
次のようなものが機能する可能性があります。
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
于 2013-03-14T21:31:50.407 に答える