Я упрощаю код для запроса вопроса.iOS NSKeyedUnarchiver не получает правильное значение
Я хочу сохранить больше файлов классов классов классов и классов нагрузки.
Но теперь я упрощаю параметры для одной части (lim) в модели (FlightSettingModel.h).
В FlightSettingModel.h Я установил здесь некоторые параметры.
код FlightSettingModel.h ниже:
#import <Foundation/Foundation.h>
@interface FlightSettingModel : NSObject<NSCoding>
// lim property part
@property float limCurrentVal;
@property float limDefaultVal;
@property float limMaxVal;
@property float limMinVal;
// .... other property part
@end
код FlightSettingModel.m ниже
#import "FlightSettingModel.h"
@interface FlightSettingModel()
{
}
@end
@implementation FlightSettingModel
-(instancetype)init
{
self = [super init];
if(self)
{
self.limDefaultVal = 3.0;
self.limCurrentVal = 4.0;
self.limMaxVal = 10;
self.limMinVal = 0;
// ... other property part value init .....
}
return self;
}
- (void)setFlightSettingToDefaultValue
{
self.limCurrentVal = self.limDefaultVal;
}
- (void) encodeWithCoder: (NSCoder *)encoder
{
[encoder encodeFloat:self.limCurrentVal forKey:@"limCurrentVal"];
}
- (id)initWithCoder:(NSCoder *)decoder {
if((self = [super init])) {
self.limCurrentVal = [decoder decodeFloatForKey:@"limCurrentVal"];
}
return self;
}
@end
Тогда я поставил одноплодный файл SETTINGDATA парафировать FlightSettingModel и другой класс модели.
SETTINGDATA модель заголовок, как показано ниже:
#import <Foundation/Foundation.h>
#import "FlightSettingModel.h"
@interface SettingData : NSObject
@property (nonatomic,strong) FlightSettingModel *flightSettingModel;
+(SettingData*) sharedInstance;
@end
код SettingData.m ниже:
#import "SettingData.h"
@implementation SettingData
SettingData *sharedInstance;
+(SettingData*) sharedInstance{
if(sharedInstance == nil)
{
sharedInstance = [SettingData new];
}
return sharedInstance;
}
-(id) init{
self = [super init];
if(self)
{
self.flightSettingModel = [FlightSettingModel new];
}
return self;
}
@end
В моем раскадровки (UI), как показано ниже:
Когда я нажимаю кнопку сохранения, я хочу сохранить пользовательскую модель класса (F lightSettingModel.h) в NSKeyedArchiver. Когда я нажимаю на загрузку, я хочу загрузить модель из архиватора с помощью NSKeyedUnarchiver и сбросить его до ползунка.
Но теперь, когда я перетаскиваю ползунок в другое значение (например: 10), затем я нажимаю кнопку «Сохранить», а затем закрываю приложение, перезагружая приложение. Я нажимаю на нагрузку, значение ползунка станет 0.
Не знаю, почему, когда я загружаю значение, все значение станет 0;
мой взгляд контроллер код .m ниже:
#import "ViewController.h"
#import "SettingData.h"
@interface ViewController()
{
NSString *path;
NSString *fileName;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// file manage
path =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES) objectAtIndex:0];
fileName = [path stringByAppendingPathComponent:@"flightFile"];
[self setUIValue];
NSLog(@"---");
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
- (IBAction)saveAction:(UIButton *)sender {
[NSKeyedArchiver archiveRootObject:[SettingData sharedInstance].flightSettingModel toFile:fileName];
}
- (IBAction)loadAction:(UIButton *)sender {
[SettingData sharedInstance].flightSettingModel = (FlightSettingModel*) [NSKeyedUnarchiver unarchiveObjectWithFile: fileName];
[self setUIValue];
NSLog(@"current Value:%.f",[SettingData sharedInstance].flightSettingModel.limCurrentVal);
}
- (IBAction)sliderChangedAction:(UISlider *)sender {
[SettingData sharedInstance].flightSettingModel.limCurrentVal = sender.value;
self.theTextField.text = [NSString stringWithFormat:@"%.f",self.theSlider.value];
}
-(void) setUIValue
{
// setting slider property
self.theSlider.maximumValue = [SettingData sharedInstance].flightSettingModel.limMaxVal;
self.theSlider.minimumValue = [SettingData sharedInstance].flightSettingModel.limMinVal;
self.theSlider.value = [SettingData sharedInstance].flightSettingModel.limCurrentVal;
self.theTextField.text = [NSString stringWithFormat:@"%.f",self.theSlider.value];
}
@end
ли кто-нибудь знает, где моя проблема в моем коде?
большое спасибо.
Если вы хотите скачать полный код (код вопрос), я загрузить в github