2013-03-14 2 views
-1

Я имею дело с приложением, которое содержит два контроллера табличного представления и одно «подробное» представление для редактирования того, что находится в ячейке второго вида таблицы. segues используется для навигации между двумя контроллерами представления таблиц. когда объект редактируется во второй таблице и возвращается к предыдущей таблице, редактирование сохраняется там, но когда я во второй таблице и перезапускаю приложение, приложение не сохраняет, но когда происходит изменение, контекст выполните функцию save:. Примечание. Объекты в первом представлении таблицы имеют отношение «один ко многим» с объектами второй таблицы.сохранение данных при выходе пользователя из приложения

+1

[Что вы пробовали?] (Http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

+0

я попытался установить во втором представлении таблицы и передать обновление в первое представление таблицы, но для этого требуется, чтобы пользователь возвращался к первой таблице, если протокол должен работать. и я попробовал это, и на самом деле я нахожу в нем больше надежды: когда пользователь переходит ко второму представлению, через prepareForSegue я передаю ему NSManagedObject (который сохраняет его как @property), тогда я делаю изменения на нем, когда обновление сразу же происходит во второй таблице. однако это не сработало. обновление не сохранялось, хотя контекст претерпевает сохранение: – user1938695

+0

Включите код, представляющий вашу попытку, с подробным описанием, где его ошибка. – Perception

ответ

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 
Смежные вопросы