#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface UserInfo : NSObject
@property (nonatomic,copy)NSString *userid;//用戶id
@property (nonatomic,copy)NSString *avatar;//頭像
@property (nonatomic,copy)NSString *mobile;//手機號
@property (nonatomic,copy)NSString *userName;//用戶名
@property (nonatomic,copy)NSString *nickname;//用戶暱稱
@property (nonatomic,copy)NSString *birthday;//生日
@property (nonatomic,copy)NSString *token;//token
@property (nonatomic,copy)NSString *sex;//性別
- (instancetype)initWithDictionary:(NSDictionary *)dictionary;
@end
@interface UserManager : NSObject
/**
存儲用戶信息
@param dic 服務器獲取來的用戶信息字典
@return <#return value description#>
*/
+ (BOOL)saveUserInfo:(NSDictionary *)dic;
/**
取用戶信息
@return 返回用戶信息模型
*/
+ (UserInfo *)userInfo;
/**
清空用戶信息
@return <#return value description#>
*/
+ (BOOL)clearUserInfo;
@end
NS_ASSUME_NONNULL_END
#import "UserManager.h"
@implementation UserInfo
- (instancetype)initWithDictionary:(NSDictionary *)dictionary
{
if ([dictionary isKindOfClass:[NSDictionary class]])
{
if (self = [super init])
{
[self setValuesForKeysWithDictionary:dictionary];
}
}
return self;
}
- (void)setValue:(id)value forKey:(NSString *)key
{
if ([value isKindOfClass:[NSNull class]])
{
return;
}
[super setValue:value forKey:key];
}
#pragma mark ————————— 對未定義key的處理方法 —————————————
- (void)setValue:(id)value forUndefinedKey:(NSString *)key
{
// id 變量名現在可以直接使用,比如你要將服務器的 id 轉成 userid
if([key isEqualToString:@"id"])
{
// self.userid = value;
// return;
}
}
@end
@implementation UserManager
+ (BOOL)saveUserInfo:(NSDictionary *)dic
{
return [NSKeyedArchiver archiveRootObject:dic toFile:[self path]];
}
+ (UserInfo *)userInfo
{
id data = [NSKeyedUnarchiver unarchiveObjectWithFile:[self path]];
UserInfo *model = [[UserInfo alloc]initWithDictionary:data];
return model;
}
+ (BOOL)clearUserInfo
{
NSFileManager *defaultManager = [NSFileManager defaultManager];
if ([defaultManager isDeletableFileAtPath:[self path]])
{
//刪除歸檔文件
return [defaultManager removeItemAtPath:[self path] error:nil];
}
else
{
return NO;
}
}
/**
Documents/ 保存應用程序的重要數據文件和用戶數據文件等。用戶數據基本上都放在這個位置(例如從網上下載的圖片或音樂文件),該文件夾在應用程序更新時會自動備份,在連接iTunes時也可以自動同步備份其中的數據。
Library:這個目錄下有兩個子目錄,可創建子文件夾。可以用來放置您希望被備份但不希望被用戶看到的數據。該路徑下的文件夾,除Caches以外,都會被iTunes備份.
Library/Caches: 保存應用程序使用時產生的支持文件和緩存文件(保存應用程序再次啓動過程中需要的信息),還有日誌文件最好也放在這個目錄。iTunes 同步時不會備份該目錄並且可能被其他工具清理掉其中的數據。
Library/Preferences: 保存應用程序的偏好設置文件。NSUserDefaults類創建的數據和plist文件都放在這裏。會被iTunes備份。
@return <#return value description#>
*/
+(NSString *)path
{
// 獲取沙盒根目錄路徑
NSString *homeDir = NSHomeDirectory();
// 獲取Documents目錄路徑
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) firstObject];
//獲取Library的目錄路徑
NSString *libDir = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory,NSUserDomainMask,YES) lastObject];
// 獲取cache目錄路徑
NSString *cachesDir = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,NSUserDomainMask,YES) firstObject];
// 獲取tmp目錄路徑
NSString *tmpDir = NSTemporaryDirectory();
// 獲取應用程序程序包中資源文件路徑的方法:
NSString *bundle = [[NSBundle mainBundle] bundlePath];
NSString *name = @"userinfo";
NSString *type = @"sql";
NSString *allName = [NSString stringWithFormat:@"%@.%@",name,type];
return [tmpDir stringByAppendingPathComponent:allName];;
}
@end
#import "UserManager.h"
// 調用
[UserManager saveUserInfo:@{@"nickname":@"小張飛"}];
UserInfo *model = [UserManager userInfo];
NSLog(@"%@", model.nickname);