![](/img/trans.png)
[英]Why can't I save changes to application settings with NSUserDefaults?
[英]I can't save NSUserdefaults from custom class
我從自定義類保存時遇到問題。 我試圖在NSUserDefaults的代碼中保存某些地方的錯誤,但是它不起作用。
H檔:
#import <Foundation/Foundation.h>
@interface Errors : NSObject<NSCoding>
@property (nonatomic,strong) NSString* type;
@property (nonatomic,strong) NSString* verNum;
@property (nonatomic,strong) NSString* title;
@property (nonatomic,strong) NSString* content;
@property (nonatomic,strong) NSString* source;
@property (nonatomic,strong) NSString* userId;
@property (nonatomic,strong) NSNumber* videoId;
@end
M檔:
#import "Errors.h"
@implementation Errors
@synthesize verNum;
@synthesize type;
@synthesize title;
@synthesize content;
@synthesize source;
@synthesize userId;
@synthesize videoId;
- (void)encodeWithCoder:(NSCoder *)encoder{
[encoder encodeObject:self.verNum forKey:@"verNum"];
[encoder encodeObject:self.type forKey:@"type"];
[encoder encodeObject:self.title forKey:@"title"];
[encoder encodeObject:self.content forKey:@"content"];
[encoder encodeObject:self.source forKey:@"source"];
[encoder encodeObject:self.userId forKey:@"userId"];
[encoder encodeObject:self.videoId forKey:@"videoId"];
}
- (id)initWithCoder:(NSCoder *)decoder{
self = [super init];
if( self != nil ) {
self.verNum = [decoder decodeObjectForKey:@"verNum"];
self.type = [decoder decodeObjectForKey:@"type"];
self.title = [decoder decodeObjectForKey:@"title"];
self.content = [decoder decodeObjectForKey:@"content"];
self.source = [decoder decodeObjectForKey:@"source"];
self.userId = [decoder decodeObjectForKey:@"userId"];
self.videoId = [decoder decodeObjectForKey:@"videoId"];
}
return self;
}
@end
保存:
errorsDitalis = [[Errors alloc]init];
errorsDitalis.verNum = (NSString *) [[request userInfo] objectForKey:@"verNum"];
errorsDitalis.type =(NSString *) [[request userInfo] objectForKey:@"type"];
errorsDitalis.title =(NSString *) [[request userInfo] objectForKey:@"title"];
errorsDitalis.content =(NSString *) [[request userInfo] objectForKey:@"content"];
errorsDitalis.source =(NSString *) [[request userInfo] objectForKey:@"source"];
errorsDitalis.userId =(NSString *) [[request userInfo] objectForKey:@"userId"];
errorsDitalis.videoId =(NSNumber *) [[request userInfo] objectForKey:@"videoId"];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:errorsDitalis forKey:@"ErrorList"];
[userDefaults synchronize];
正在加載:
Errors * newError = [[Errors alloc]init];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
newError = [userDefaults objectForKey:@"ErrorList"];
它只是為newErrors返回nil。 我嘗試使用此幫助,但是沒有用。 有人有主意嗎?
嘗試
[self setVerNum:[decoder decodeObjectForKey:@"verNum"]];
代替
self.verNum = [decoder decodeObjectForKey:@"verNum"];
我相信您在調用initWithCoder
時應該使用initWithCoder
我認為我應該這樣做:
[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:self.errorsDitalis] forKey:@"ErrorList"];
[[NSUserDefaults standardUserDefaults] synchronize];
並不是:
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
[userDefaults setObject:errorsDitalis forKey:@"ErrorList"];
[userDefaults synchronize];
並加載:
newError = (Errors *)[NSKeyedUnarchiver unarchiveObjectWithData:[[NSUserDefaults standardUserDefaults] objectForKey:@"ErrorList"]];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.