我是新来的iOS编程和已经写了一个简单的提醒风格的应用程序,现在我重写,正确地实现了MVC模型之前我所有的代码是视图控制器内。
我有一个名为事件具有属性名称,时间自定义类,重复等,然后结构如下:
Model类
检索,处理和并保存数据和从NSUserDefaults
RootViewController的
创建模型对象的实例,并要求该模型返回所有活动对象从NSUserDefaults
然后将它们显示在UITableView
EditEventViewController
[editEventVC initWithEvent:theEvent];
传递之前已在通过init方法表格单元选择的特定事件对象,并显示所有可用于编辑的属性
EditEventPropertyViewController
[editEventPropertyVC initWithValue:propertyValue];
传递的属性值,以经由init方法编辑(例如事件名称),并通过一个委托方法返回用户更新值
这是实现这个应用程序的正确方法是什么?
什么是保存在更新事件对象的最佳方式NSUserDefaults
通过模型的EditEventViewController完成后? 通过委托? 目前,我重装上viewWillAppear中的UITableView的数据在RootViewController的,因此将重新检索之前将其更新的数据保存。
谢谢
你可以收集存储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;
}
希望这将让你开始。