ios:使用NSUserDefaults存取用户头像等信息

前言:在ios开发中,当用户注册或登录时,不仅需要将用户信息提交到服务器,还需要将用户信息存储到本地,比如在app的个人中心中,下次打开app头像就会初始化为用户头像而不是默认头像。实现本地存取用户信息使用的是NSUserDefaults。本文已经将存取功能封装为工具类,在文章最后附上下载地址,大家可以下载参考哦。

一.NSUserDefaults存取基本类型:

1.NSUserDefaults存基本类型:

NSUserDefaults   *userDefaults = [NSUserDefaults standardUserDefaults];

NSInteger i = 0;

[userDefaults setInteger: i forKey: @"NSInteger"];

BOOL b = YES;

[userDefaults setBool: b forKey: @"BOOL"];

CGFloat f = 0.1;

[userDefaults setFloat: f forKey: @"CGFloat"];

2.NSUserDefaults取基本类型:

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

NSInteger i = [userDefaults integerForKey: @"NSInteger"];

BOOL b = [userDefaults boolForKey: @"BOOL"];

CGFloat f = [userDefaults floatForKey: @"CGFloat"];

二.然而项目中要存取的信息是复杂的对象类型:

以上介绍的是如何用NSUserDefaults存取基本类型,我们要存取的用户信息一般包括:用户ID-NSString,用户密码-NSString,用户头像-UIImage...这些都是OC的对象类型,存储时要转为NSData。

所以:

存储的时候:对象-》NSData-》存储

取出的时候:NSData-》对象

三.获取用户头像:

一般app获取用户头像的方式分为两种:从相册选择、拍照。这里就介绍使用这两种方式:

#pragma mark更换头像点击

-(void) userIconChange{

UIAlertController *actionSheetController = [UIAlertController alertControllerWithTitle: @"更换头像" message: @"拍照或从相册中选择" preferredStyle: UIAlertControllerStyleActionSheet];

[actionSheetController addAction: [UIAlertAction actionWithTitle: @"拍照" style: UIAlertActionStyleDefault handler:^(UIAlertAction *_Nonnull action) {

[self takePhoto];

}]];

[actionSheetController addAction: [UIAlertAction actionWithTitle:@"打开相册"style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {

[self LocalPhoto];

}]];

[actionSheetController addAction: [UIAlertAction actionWithTitle:@"取消"style:UIAlertActionStyleCancel handler:^(UIAlertAction *_Nonnull action) {}]];

[self presentViewController: actionSheetController animated:YES completion:^{}];

}

/**

*从相册选择照片

*/

-(void)LocalPhoto

{

UIImagePickerController *picker = [[UIImagePickerController alloc]init];

/*资源类型为图片库*/

picker.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;

picker.delegate=self;

/*设置选择后的图片可被编辑*/

picker.allowsEditing=YES;

[self presentViewController:picker animated:YES completion:^{}];

}

/**

*拍照

*/

-(void)takePhoto

{

/*资源类型为照相机*/

UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;

UIImagePickerControllerQualityType qualityType = UIImagePickerControllerQualityTypeHigh;

/*判断是否有相机*/

if([UIImagePickerController isSourceTypeAvailable : UIImagePickerControllerSourceTypeCamera]){

UIImagePickerController *picker = [[UIImagePickerController alloc]init];

picker.delegate=self;

/*设置拍照后的图片可被编辑*/

picker.allowsEditing=YES;

/*资源类型为照相机*/

picker.sourceType= sourceType;

/*品质为高*/

picker.videoQuality= qualityType;

[self presentViewController: picker animated:YES completion:^{}];

}else

{NSLog(@"该设备无摄像头");}}

/**

*图像选取器的委托方法,选完图片后回调该方法

*/

-(void)imagePickerController: (UIImagePickerController*)picker didFinishPickingImage:(UIImage*)image editingInfo:(NSDictionary*)editingInfo {

/*当图片不为空时保存图片*/

if(image !=nil)

[LoginState saveUserInfoToUserdefaults: UserHeadImage andInfo:image];

/*关闭相册界面*/

[picker dismissViewController Animated:YES completion:^{}];

}

四.封装的存取用户信息的工具类方法:

第三步中用到的[LoginState saveUserInfoToUserdefaults: UserHeadImage andInfo:image]方法是我封装的登录工具类,这个方法根据指定的key存取信息,头像对应的key是UserHeadImage,大家可以自行定义枚举类型。工具类方法如下所示:

/**

*保存指定类型用户信息到userDefaults

*/

+(void)saveUserInfoToUserdefaults: (InfoTypeIndex)type andInfo:(NSObject*)userInfo{

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults];

switch(type) {

case UserHeadImage:{//这里保存的是image

UIImage *image = (UIImage*)userInfo;

[userDefaults setObject:[UIImage getDataFromImage: image] forKey: @"UserHeadImage"];}

break;

case UserName:

[userDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject: userInfo] forKey:@"UserName"];

default:break;}

[userDefaults synchronize];}

/**

*取出指定类型用户信息到userDefaults

*/

+(NSObject*)takeUserInfoToUserdefaults: (InfoTypeIndex)type{

NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

NSData *infoData;

NSObject *userInfo;

switch(type) {

case UserHeadImage:

infoData = [userDefaults dataForKey:@"UserHeadImage"];

userInfo = [UIImage imageWithData:infoData];

break;

case UserName:

infoData = [userDefaults dataForKey:@"UserName"];

userInfo = [NSKeyedUnarchiver unarchiveObjectWithData: infoData];

break;

default:

break;

}

return userInfo;}

终于写完啦,这是我第一次使用简书,之前都是用CSDN写博客的。想哭....因为CSDN的markdawn感觉好好用。。。请大家原谅我初次使用简书导致的文章版面粗糙,让我下去研究下简书怎么写效率高文章美观,另外,上面有用到一个UIImage的扩展,将UIImage转换为NSData,我将这个方法写在这里,大家自己写成扩展就好:

//将UIImage转换为NSData

+(NSData*)getDataFromImage:(UIImage*)image{

NSData *data;

/*判断图片是不是png格式的文件*/

if(UIImagePNGRepresentation(image))

data = UIImagePNGRepresentation(image);

/*判断图片是不是jpeg格式的文件*/

else

data = UIImageJPEGRepresentation(image,1.0);

return data;

最后在这里附上我的CSDN博客链接:http://blog.csdn.net/u012320459,然后本文中用到的登录工具类在这篇文章最后有下载链接:http://blog.csdn.net/u012320459/article/details/51892927。

对哦,文章代码是实际项目中用到的,测试通过。

欢迎各种指点、指导、还有指教

-----------------------------更新分割线--------------------------------------

我把里面用到的Head.h文件和工具类都上传到百度云盘了:http://pan.baidu.com/s/1eRSy0ro

大家自行下载,如果有问题欢迎提出哦

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容