iOS MVC – 来回传递数据来查看控制器和模型

我是新来的iOS编程,并写了一个简单的提醒风格的应用程序,我现在正在重写它来正确地实现MVC模型,因为以前我所有的代码是在视图控制器。

我有一个名为Event的属性名称,时间,重复等自定义类,然后结构如下:

模型类

NSUserDefaults检索,处理和保存数据

RootViewController的

创buildModel对象的实例,并要求模型返回NSUserDefaults所有Events对象,然后将它们显示在UITableView

EditEventViewController

[editEventVC initWithEvent:theEvent];

通过init方法传递在表格单元格中选定的特定事件对象,并显示可用于编辑的所有属性

EditEventPropertyViewController

[editEventPropertyVC initWithValue:propertyValue];

通过init方法传递属性的值(例如,事件名称),并通过委托方法返回用户更新的值

这是实现这个应用程序的正确方法?

使用EditEventViewController完成后,通过模型在NSUserDefaults保存更新的Event对象的最佳方法是什么? 通过代表? 目前,我正在重新加载在rootViewController的viewWillAppear的uitableview数据,所以它将不得不保存更新的数据之前再次检索它。

谢谢

您可以将Event的集合存储在NSUserDefaults 。 由于它是一个自定义的类,所以你需要实现NSCoding协议序列化到NSUserDefaults

 //Event.h @interface Event : NSObject<NSCoding> @property (nonatomic, copy) NSString *name; @property (nonatomic, strong) NSDate *time; @property (nonatomic) NSInteger repeat; - (void)save; + (NSArray *)allEvents; //Event.m #define kSavedEvents @"SavedEvents" #pragma mark - Encoding - (void)encodeWithCoder:(NSCoder *)encoder { [encoder encodeObject:self.name forKey:@"EventName"]; [encoder encodeObject:self.time forKey:@"EventTime"]; [encoder encodeObject:@(self.repeat) forKey:@"EventRepeat"]; } #pragma mark - Decoding - (id)initWithCoder:(NSCoder *)decoder { self = [super init]; if (self) { _name = [decoder decodeObjectForKey:@"EventName"]; _time = [decoder decodeObjectForKey:@"EventTime"]; _repeat = [[decoder decodeObjectForKey:@"EventRepeat"]integerValue]; } return self; } 

您需要在存储到NSUserDefaults时存档数据,并在取回时取消存档

  (void)save { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *savedData = [defaults objectForKey:kSavedEvents]; NSMutableArray *savedEvents = [@[] mutableCopy]; //Some events are already there in there if (savedData) { savedEvents = [[NSKeyedUnarchiver unarchiveObjectWithData:savedData]mutableCopy]; } [savedEvents addObject:self]; //Archiving the savedEvents to data NSData *newEventData = [NSKeyedArchiver archivedDataWithRootObject:savedEvents]; [defaults setObject:newEventData forKey:kSavedEvents]; [defaults synchronize]; } + (NSArray *)allEvents { NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *data = [defaults objectForKey:kSavedEvents]; if (data) { return [NSKeyedUnarchiver unarchiveObjectWithData:data]; } return nil; } 

希望这会让你开始。