-1

2番目のテーブルビューのセルにあるものを編集するために、2つのテーブルビューコントローラーと1つの「詳細」ビューを含むアプリケーションを扱っています。seguesは、2つのテーブルビューコントローラー間を移動するために使用されます。オブジェクトが2番目のテーブルで編集されて前のテーブルに戻ると、編集はそこに保存されますが、2番目のテーブルにいてアプリを再起動すると、編集が発生するとコンテキストは保存されますが、アプリは保存されません。 save:関数を実行します。注:最初のテーブルビューのエンティティは、2番目のテーブルのエンティティと1対多の関係にあります。

4

1 に答える 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 に答える