1.一个账号不能多个设备使用
https://www.jianshu.com/p/a0bdaa0919f1
https://www.jianshu.com/p/9ff7f3ae486d
2.登录
2.1新建一个mode :存储用户信息
#import <Foundation/Foundation.h>
//从服务器上获取的用户信息
@interface UserInfoModel : NSObject
@property (copy, nonatomic) NSString *mobile;
@property (copy, nonatomic) NSString *agentId;
@property (copy, nonatomic) NSString *userId;
@property (copy, nonatomic) NSString *password;
@property (copy, nonatomic) NSString *passWord;
@property (assign, nonatomic) int userType;
@end
2.2 .m中实现nscode协议 加密用的
#import "UserInfoModel.h"
@implementation UserInfoModel
- (void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:self.mobile forKey:@"mobile"];
[encoder encodeObject:self.agentId forKey:@"agentId"];
[encoder encodeObject:self.userId forKey:@"userId"];
[encoder encodeInt: self.userType forKey:@"userType"];
}
-(id)initWithCoder:(NSCoder *)decoder
{
if(self = [super init])
{
self.mobile = [decoder decodeObjectForKey:@"mobile"];
self.agentId = [decoder decodeObjectForKey:@"agentId"];
self.userId = [decoder decodeObjectForKey:@"userId"];
self.userType = [decoder decodeIntForKey:@"userType"];
}
return self;
}
@end
2.3 存储和取出用户信息 新建一个类
//存储
+ (void)saveInfoAboutLoginInfo:(UserInfoModel *)model
{
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:model];
NSUserDefaults *userDefaults= [[NSUserDefaults standardUserDefaults] setObject:data forKey:DEFAULTS_USERINFO];
[userDefaults synchronize];
//@需要注意的是,NSUserDefaults是定时把缓存中的数据写入磁盘的,而不是即时写入,为了防止在写完NSUserDefaults后程序退出导致的数据丢失,可以在写入数据后使用synchronize强制立即将数据写入磁盘:
}
//获取
+ (UserInfoModel *)getInfoAboutLoginInfo
{
NSData *encodedObject = [[NSUserDefaults standardUserDefaults] objectForKey:DEFAULTS_USERINFO];
id model = [NSKeyedUnarchiver unarchiveObjectWithData:encodedObject];
if (IsNilOrNull(model))
{
return nil;
}
else
{
return (UserInfoModel *)model;
}
}
2.4检测用户是否登录
+ (BOOL)checkInfoAboutIsLogin
{
if (IsNilOrNull([CommonInfo getInfoAboutLoginInfo]))
{
return NO;
}
else
{
return YES;
}
}
3.退出登录
@如果想删除某个数据项,可以使用removeObjectForKey删除数据:
[mySetting removeObjectForKey:@"arrItem"];
也可以保存一个空
[CommonInfo saveUserName:nil passWord:nil];
//还有推送也要处理
//最后跳跳转看需求跳把:跳到跟控制器不用pop
BaseNavViewController *navVC = [[BaseNavViewController alloc] initWithRootViewController:tabbarVC];
[self.window setRootViewController:navVC];
[self.window makeKeyAndVisible];
4.登录失败,
5.登录成功,接下来,获取用户信息失败
5.1iOS网络请求重发机制
//这个是写在封装的网络请求的文件下的
- (void)downloadFileRetryingNumberOfTimes:(NSUInteger)ntimes
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure
{
if (ntimes <= 0) {//区分是不是最后一次重发的结果
//最后一次重发的结果,
if (success) {
success(...);
}
if (failure) {
NSError *error = ...;
failure(error);
}
} else {
//不是最后一次重发的结果
[self getPath:@"/path/to/file" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(...);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {//重发
[self downloadFileRetryingNumberOfTimes:ntimes - 1 success:success failure:failure];
}];
}
}
4
网友评论