iOS实现用户信息的管理

作者: 豆大人007 | 来源:发表于2017-05-04 10:31 被阅读1916次

        在我们日常使用的APP中,登录功能可谓是最基本的必备功能。对于一个功能完善的APP来说,会有相应的机制来维护用户的个人昵称,头像,以及登录的令牌token等一系列隐私的个人信息,在我们的后台维护用户信息的同时,我们也需要对用户的个人信息进行相应的本地化。

       用户的个人信息会在APP的使用过程中区分用户所享有的不同的权限,比如:当用户试图点击进入一个“收藏”界面功能的时候,这个时候就需要对用户的登录状态进行判断,如果用户处于登录状态,那么可以直接进入收藏界面。如果用户处于游客状态(也就是未登录状态),那么我们不能让用户直接进入到收藏界面,那么这个时候,我们可以通过跳转到登录界面,引导用户登录,或者弹窗友好提示用户未登录。

      类似登录的情况还会有:当用户更改了头像之后或昵称之后,当修改成功之后,会在后台的数据库中对用户的头像或昵称进行更新。此时,在本地,我们也是需要对用户的信息进行更新的,避免在某个地方使用用户的信息的时候,出现与最新数据不匹配的问题。那么问题来了,对于APP中频繁使用的和更新的用户信息,我们需要创建一个单独的公共类来统一管理这些用户信息,对用户信息的添加,更新和删除都通过这个个人信息管理工具类来处理,那么对用户信息的处理就会变得简洁,更容易维护和使用。

上图素材取自互联网,如有侵权,请私信联系删除

  好了,话不多说,直接开撸。先让我们创建一个简单的工具类:UserInfoManager 

1.UserInfo工具类的属性就是用户的各项信息,包括最常用的几个属性,如:userID和昵称以及头像等,具体还要根据自己的项目的业务需要来确定。

2.通过单例模式来实现全局共享这个用户信息类

3.(1)当我们登录成功或者调用获取用户信息的接口成功之后,服务器会给我们返回用户的相关信息。(此处因为没有可以展示的接口,我们就自己模拟构造一下相关的数据信息)

NSDictionary *infoDic = @{@"userName":@"猫蛋",@"userID":@"akjhfakhewawehfakehffcnak",@"nickName":@"笑傲江湖",@"headPic":@"http://www.baidu.com/pic",@"phone":@"18837879087",@"exclusiveCode":@"EGD56",@"birthday":@"1992-11-21",@"email":@"wangyitdp@163.com",@"sex":@1};

进行到这一步,我们可以将拿到的用户信息直接传递给UserInfoManager工具类,它会帮你把这些信息配置到用户属性列表中。key为属性名,value为属性的值。

[UserInfoManager configInfo:infoDic];

(2)该方法将字典中的所有key值都取出,根据这些key值构造不同属性的setter方法,并调用构造好的setter方法。

问题:调用属性的setter方法,是如何将属性的值存储到用户偏好设置列表中的呢???!




 (3)  其实解决这个问题是使用了runtime中的一些功能方法,真不愧为iOS中的黑魔法啊,实际用起来还是非常爽的。

如果对runtime并不是很熟悉,可以相互学习和交流,在此就不着重讲解runtime的相关知识,只简单讲解对工具类中出现的功能的实现。

在+load{ }方法中对所有属性的setter方法都进行替换,替换为我们自己定义的setter方法setMyAttribute:;这时,当我们对工具类进行属性设置的时候,会调用相应属性的setter方法,因为我们把最原始的setter方法替换成了自定义的setMyAttribute:方法,此时会触发setMyAttribute方法;在该方法中,我们可以拿到原本方法的名称(通过_cmd),我们根据原本的setter方法名进行字符串的剖析会知道相应属性,这时已经是万事具备了,属性的名称有了,属性的值也有了(参数即是属性的值)。哈哈哈,是不是内心小开心了一把,通过key-value,将信息存储到本地的用户偏好设置中。ok,就这么轻松的搞定了~~~~

(4)当然,取数据的时候,也是通过交换方法的方式,将存储在本地的数据取出来;在这里就不啰嗦了。

4..登出操作,当用户退出登录或者用户信息过期被下线,以及在其他地方登录挤下线。都可以调用登出操作方法,将本地的所有用户的信息都清除掉

文采不好,可能讲述的不太清楚,希望大家多多提建议。该类中多处涉及到runtime的相关知识,在使用的时候记得不要忘记导入 <objc/runtime.h>文件喔~~~~

如果有对runtime感兴趣的小伙伴,可以留下联系方式一同交流学习。

附上代码的github地址:github.com/tandepeng/UserInfoManager.git

相关文章

  • iOS实现用户信息的管理

    在我们日常使用的APP中,登录功能可谓是最基本的必备功能。对于一个功能完善的APP来说,会有相应的机制来维...

  • 带你一步步用MVC架构实现简单的用户管理系统

    用户管理系统,实现简单的用户管理,有包括普通用户、管理员;功能包括添加用户,删除用户,查询用户信息,更改用户信息等...

  • 公众平台用户管理优化,支持标签功能

    公众平台用户管理优化已上线。目前已支持标签管理用户,且用户卡片实现多场景管理与查看用户信息,多维度提升用户管理效率...

  • 计算机毕业设计之SpringBoot健康管理系统网站

    开发技术 springboot mybatis mysql 功能 遇见健康管理网站设计主要用于实现用户健康信息管理...

  • 1.简介

    Spring Session Spring Session 提供了一个管理用户session信息的接口和实现 1....

  • Linux 常用命令

    一. 查找文件 二. 进程查看 三. 硬件信息 四. 用户管理 用户信息存放文件 用户相关的命令 用户管理 用户组...

  • 2017年9月25日 学习总结1

    今天开始做大作业,学生成绩信息管理系统。 目前已经实现界面显示,用户名密码的输入,学生信息浏览功能。计划明天实现全...

  • Eclipse+Java+Swing实现仓库管理系统

    一、系统介绍本系统实现了用户登录系统,查看商品和仓库信息。管理员对用户的增删改查,管理员对商品的增删改查,管理员对...

  • iOS动画原理学习

    iOS动画可以分为两大类:1.系统提供的关键帧动画,用户指定关键信息,系统自动实现动画过程,对用户而言操作起来简单...

  • 会员系统浅析

    会员系统主要是管理用户信息,通过一系列满足用户心理、提高黏性的方法来实现开发新用户、增加用户活跃度的目的。会员...

网友评论

  • 哈哈大笑呼呼呼呼:楼主你github上的demo是最新的吗?能直接复用吗
    豆大人007:@SunMengK 可以直接使用
  • 熟睡的毛毛虫:pch 路径需要修改
  • 轻尘_小吕:这份代码是不是必须保持服务端获取数据的key值与属性名一致?
    豆大人007:@轻尘_小吕 是的
  • 浅浅浅丶蓝:如果缺少字典里的 属性, 会崩溃的,怎么解决
    流小星:@豆大人007 这个方法好像不会执行,导致所有的都存不进去
    豆大人007:感谢您对问题的指出
    豆大人007:if ([self respondsToSelector:setSeletor]) {
    [manager performSelector:setSeletor withObject:value];
    }
    在构造完setter方法之后,判断对象是否响应该setter方法。如果不响应的话,说明工具类中不含有该属性。
  • wayward玉:楼主你好,请问[manager performSelector:setSeletor withObject:value];这个警告该怎么消除呢?
    豆大人007:这个好像是和编译机制有关系,不过对功能并没有影响。
  • Lizy0123:能发一份demo或者Github链接嘛,谢谢 451371706@qq.com
    Lizy0123:@豆大人007 谢谢:blush:
    豆大人007:@Lizy0123 https://github.com/tandepeng/UserInfoManager.git
  • yyggzc521:有完整的demo吗?可以发我一份吗?453645620@qq.com,谢谢!
    豆大人007:好的

本文标题:iOS实现用户信息的管理

本文链接:https://www.haomeiwen.com/subject/zpsrtxtx.html