我是iOS编程新手并编写了一个简单的提醒样式应用程序,我现在正在重写它以正确实现MVC模型,因为之前我的所有代码都在View Controllers中。
我有一个名为Event的自定义类,包含属性名称,时间,重复等,然后是以下结构:
模型类
从NSUserDefaults
RootViewController的
创建Model对象的实例,并要求模型返回NSUserDefaults
中的所有Events对象,然后将其显示在UITableView
EditEventViewController
[editEventVC initWithEvent:theEvent];
通过init方法传递在表格单元格中选择的特定事件对象,并显示可供编辑的所有属性
EditEventPropertyViewController
[editEventPropertyVC initWithValue:propertyValue];
通过init方法传递要编辑的属性值(例如事件名称),并通过委托方法返回用户更新的值
这是实施此应用的正确方法吗?
使用EditEventViewController完成后,通过模型在NSUserDefaults
中保存更新的Event对象的最佳方法是什么?通过代表?目前我正在rootViewController中的viewWillAppear上重新加载uitableview数据,因此它必须在再次检索之前保存更新的数据。
由于
答案 0 :(得分:1)
您可以将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;
}
希望这会让你开始。