开源中国iOS客户端学习——(十二)用户登陆

2023-10-30

上一篇博客  开源中国iOS客户端学习——(十一)AES加密 中提到将用户名和密码保存到了本地沙盒之中,在从本地读取用户名和密码,这是一个怎样的过程?

[cpp]  view plain copy
  1. -(void)saveUserNameAndPwd:(NSString *)userName andPwd:(NSString *)pwd  
  2. {  
  3.     NSUserDefaults * settings = [NSUserDefaults standardUserDefaults];  
  4.     [settings removeObjectForKey:@"UserName"];  
  5.     [settings removeObjectForKey:@"Password"];  
  6.     [settings setObject:userName forKey:@"UserName"];  
  7.       
  8.     pwd = [AESCrypt encrypt:pwd password:@"pwd"];  
  9.       
  10.     [settings setObject:pwd forKey:@"Password"];  
  11.     [settings synchronize];  
  12. }  

上面的方法使用了NSUserDefaults类,它也是以字典形式实现对数据功能,并将这些数据保存到本地应用程序沙盒之中,这种方法适合保存较小的数据,例如用户登陆配置信息;这段代码首先是定义了一个对象,进行初始化,移除键值为UseName和Password的对象,防止数据混乱造成干扰;然后就是重新设置键值信息; [settings synchronize];将键值信息同步道本地;

现在我们道沙盒中来看看这个用户配置信息

首先查看应用程序沙盒的路径 ,使用

[cpp]  view plain copy
  1.   
[cpp]  view plain copy
  1. <span style="font-family:Comic Sans MS;font-size:18px;">    NSString *homeDirectory = NSHomeDirectory();  
  2.     NSLog(@"path:%@", homeDirectory);</span>  
打印结果:   path:/Users/DolBy/Library/Application Support/iPhone Simulator/5.1/Applications/55C49712-AD95-49E0-B3B9-694DC7D26E94

但是在我的DolBy用户下并没有Library这个目录,这是因为系统隐藏了这些文件目录,现在需要显示这些隐藏的文件,打开终端输入 defaults write com.apple.finder AppleShowAllFiles -bool true  回车,然后重启Finder(不会?请看 查看iOS沙盒(SanBox)文件),找到55C49712-AD95-49E0-B3B9-694DC7D26E94目录下的Library/Preferences下的 net.oschina.iosapp.plist文件,将其打开





从中不难看出保存在本地沙盒中用户的一些基本信息,以及一些配置信息,还记录一些上次获取数据时间等等;


登陆类在Setting目录下的loginView类,先看看loginView.xib吧,界面比较简陋,可能是缺美工吧;



从头文件中声明部分

[cpp]  view plain copy
  1. #import <UIKit/UIKit.h>  
  2. #import "Tool.h"  
  3. #import "ProfileBase.h"  
  4. #import "MessageView.h"  
  5. #import "Config.h"  
  6. #import "MBProgressHUD.h"  
  7. #import "MyThread.h"  
  8.   
  9. @interface LoginView : UIViewController<UIWebViewDelegate>   
  10. {  
  11. //    ASI类库,获取网络请求,进行登陆验证  
  12.     ASIFormDataRequest *request;  
  13. }  
  14. //接受用户名输入  
  15. @property (strong, nonatomic) IBOutlet UITextField *txt_Name;  
  16. //接受用户属于密码  
  17. @property (strong, nonatomic) IBOutlet UITextField *txt_Pwd;  
  18. //开关按钮,设置用户是否要记住用户名和密码  
  19. @property (strong, nonatomic) IBOutlet UISwitch *switch_Remember;  
  20. //标记作用,用于记录请求数据返回异常或错误时是否弹出一个警告  
  21. @property BOOL isPopupByNotice;  
  22. //webView,布局一个手机上的web网页,显示说明信息,在这个web页面有富文本使用,直接可以跳转到url上  
  23. @property (strong, nonatomic) IBOutlet UIWebView *webView;  
  24.   
  25. //登陆处理  
  26. - (IBAction)click_Login:(id)sender;  
  27. //取消两个textFile的第一响应对象  
  28. - (IBAction)textEnd:(id)sender;  
  29. //取消键盘第一响应对象,点击页面推出键盘  
  30. - (IBAction)backgrondTouch:(id)sender;  
  31. //根据返回的数据保存用户名和用户ID到本地  
  32. - (void)analyseUserInfo:(NSString *)xml;  
  33.   
  34. @end  

在实现文件里,粘贴上主要方法代码

[cpp]  view plain copy
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.   
  5.     [Tool clearWebViewBackground:webView];  
  6.     [self.webView setDelegate:self];  
  7.       
  8.     self.navigationItem.title = @"登录";  
  9.     //决定是否显示用户名以及密码  
  10.     NSString *name = [Config Instance].getUserName;  
  11.     NSString *pwd = [Config Instance].getPwd;  
  12. //    如果用户名和密码存在,且不为空,取出付给相应text  
  13.     if (name && ![name isEqualToString:@""]) {  
  14.         self.txt_Name.text = name;  
  15.     }  
  16.     if (pwd && ![pwd isEqualToString:@""]) {  
  17.         self.txt_Pwd.text = pwd;  
  18.     }  
  19.       
  20.     UIBarButtonItem *btnLogin = [[UIBarButtonItem alloc] initWithTitle:@"登录" style:UIBarButtonItemStyleBordered target:self action:@selector(click_Login:)];  
  21.     self.navigationItem.rightBarButtonItem = btnLogin;  
  22.     self.view.backgroundColor = [Tool getBackgroundColor];  
  23.     self.webView.backgroundColor = [Tool getBackgroundColor];  
  24. //    web控件上信息  
  25.     NSString *html = @"<body style='background-color:#EBEBF3'>1, 您可以在 <a href='http://www.oschina.net'>http://www.oschina.net</a> 上免费注册一个账号用来登陆<p />2, 如果您的账号是使用OpenID的方式注册的,那么建议您在网页上为账号设置密码<p />3, 您可以点击 <a href='http://www.oschina.net/question/12_52232'>这里</a> 了解更多关于手机客户端登录的问题</body>";  
  26.     [self.webView loadHTMLString:html baseURL:nil];  
  27.     self.webView.hidden = NO;  
  28. }   

 在 [ToolclearWebViewBackground:webView];作用描述不好,直接看方法

[cpp]  view plain copy
  1. + (void)clearWebViewBackground:(UIWebView *)webView  
  2. {  
  3.     UIWebView *web = webView;  
  4.     for (id v in web.subviews) {  
  5.         if ([v isKindOfClass:[UIScrollView class]]) {  
  6.             [v setBounces:NO];  
  7.         }  
  8.     }  
  9. }  

[v setBounces:NO];  如果[v setBounces:YES]; 滚动上下滚动是出现空隙,不美观,为NO  时就不会;

  


[cpp]  view plain copy
  1. - (IBAction)click_Login:(id)sender   
  2. {  
  3. //    获取用户名和密码  
  4.     NSString *name = self.txt_Name.text;  
  5.     NSString *pwd = self.txt_Pwd.text;  
  6. //    使用ASI类库请求登陆API,  
  7.     request = [ASIFormDataRequest requestWithURL:[NSURL URLWithString:api_login_validate]];  
  8.     [request setUseCookiePersistence:YES];  
  9.     [request setPostValue:name forKey:@"username"];  
  10.     [request setPostValue:pwd forKey:@"pwd"];  
  11.     [request setPostValue:@"1" forKey:@"keep_login"];  
  12.     [request setDelegate:self];  
  13. //    失败调用 requestFailed:  
  14.     [request setDidFailSelector:@selector(requestFailed:)];  
  15. //    成功调用 equestLogin:  
  16.     [request setDidFinishSelector:@selector(requestLogin:)];  
  17. //    开始请求  
  18.     [request startAsynchronous];  
  19. //    动画提示用户等待  
  20.     request.hud = [[MBProgressHUD alloc] initWithView:self.view];  
  21.     [Tool showHUD:@"正在登录" andView:self.view andHUD:request.hud];  
  22. }  
[cpp]  view plain copy
  1.   
[cpp]  view plain copy
  1. //  登陆失败,隐藏显示的动画  
  2. - (void)requestFailed:(ASIHTTPRequest *)request  
  3. {  
  4.     if (request.hud) {  
  5.         [request.hud hide:YES];  
  6.     }  
  7. }  


[cpp]  view plain copy
  1. - (void)requestLogin:(ASIHTTPRequest *)request  
  2. {  
  3.     if (request.hud) {  
  4.         [request.hud hide:YES];  
  5.     }  
  6. //    根据请求回来的xml进行解析数据,判断是否登陆成功  
  7.     [Tool getOSCNotice:request];  
  8. //    将请求回来的信息保存在客户端  
  9.     [request setUseCookiePersistence:YES];  
  10.     ApiError *error = [Tool getApiError:request];  
  11.      
  12.     if (error == nil) {  
  13.         [Tool ToastNotification:request.responseString andView:self.view andLoading:NO andIsBottom:NO];  
  14.     }  
  15.     switch (error.errorCode) {  
  16.           
  17.         case 1:  
  18.         {  
  19.             [[Config Instance] saveCookie:YES];  
  20.             if (isPopupByNotice == NO)   
  21.             {  
  22.                 NSUserDefaults  *d= [NSUserDefaults standardUserDefaults];  
  23.                 [self.navigationController popViewControllerAnimated:YES];  
  24.             }  
  25.               
  26.             //处理是否记住用户名或者密码  
  27.             if (self.switch_Remember.isOn)   
  28.             {  
  29.                 [[Config Instance] saveUserNameAndPwd:self.txt_Name.text andPwd:self.txt_Pwd.text];  
  30.             }  
  31.             //否则需要清空用户名于密码  
  32.             else  
  33.             {  
  34.                 [[Config Instance] saveUserNameAndPwd:@"" andPwd:@""];  
  35.             }  
  36.             //返回的处理  
  37.   
  38.             if ([Config Instance].viewBeforeLogin)   
  39.             {  
  40.                 if([[Config Instance].viewNameBeforeLogin isEqualToString:@"ProfileBase"])  
  41.                 {  
  42.                     ProfileBase *_parent = (ProfileBase *)[Config Instance].viewBeforeLogin;  
  43.                     _parent.isLoginJustNow = YES;  
  44.                 }  
  45.             }  
  46.               
  47.             //开始分析 uid 等等信息  
  48.             [self analyseUserInfo:request.responseString];  
  49.             //分析是否需要退回  
  50.             if (self.isPopupByNotice) {  
  51.                 [self.navigationController popViewControllerAnimated:YES];  
  52.             }  
  53. //            查看startNotice方法可知是一个定时器,每隔60s刷新一下用户信息,是否有新的粉丝或几条评论  
  54.             [[MyThread Instance] startNotice];  
  55.         }  
  56.             break;  
  57.         case 0:  
  58.         case -1:  
  59.         {  
  60. //            返回 当error.errorCode =0 || 1的时候,显示相关错误信息  
  61.             [Tool ToastNotification:[NSString stringWithFormat:@"错误 %@",error.errorMessage] andView:self.view andLoading:NO andIsBottom:NO];  
  62.         }  
  63.             break;  
  64.     }  
  65. }  


ApiError 这个类看起来可能很迷惑人,它并不完全像字面意思那样指的是错误的api信息,而是根据请求返回来的数字进行判断。如果error.errorCode = 1表示成功返回了用户的数据,0,-1就可能由于服务器网络等原因不能正确返回数据;

在ApiError *error = [Tool getApiError:request];中,打印 request.responseString如下,

[html]  view plain copy
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2.   
  3.   
  4. <oschina>  
  5.   <result>  
  6.     <errorCode>1</errorCode>  
  7.     <errorMessage><![CDATA[登录成功]]></errorMessage>  
  8.   </result>  
  9.     <user>  
  10.     <uid>112617</uid>  
  11.     <location><![CDATA[河南 南阳]]></location>  
  12.     <name><![CDATA[新风作浪]]></name>  
  13.     <followers>1</followers>  
  14.     <fans>0</fans>  
  15.     <score>1</score>  
  16.     <portrait>http://static.oschina.net/uploads/user/56/112617_100.jpg?t=1350377690000</portrait>  
  17.   </user>  
  18.   <notice>  
  19.     <atmeCount>0</atmeCount>  
  20.     <msgCount>0</msgCount>  
  21.     <reviewCount>0</reviewCount>  
  22.     <newFansCount>0</newFansCount>  
  23. </notice>  
  24. </oschina>  
  25. <!-- Generated by OsChina.NET (init:3[ms],page:3[ms],ip:61.163.231.198) -->  


在 [self analyseUserInfo:request.responseString]方法中, 根据请求成功返回的xml,解析用户名和UID,保存用户的UID

[cpp]  view plain copy
  1. - (void)analyseUserInfo:(NSString *)xml  
  2. {  
  3.     @try {  
  4.         TBXML *_xml = [[TBXML alloc] initWithXMLString:xml error:nil];  
  5.         TBXMLElement *root = _xml.rootXMLElement;      
  6.         TBXMLElement *user = [TBXML childElementNamed:@"user" parentElement:root];  
  7.         TBXMLElement *uid = [TBXML childElementNamed:@"uid" parentElement:user];  
  8.         //获取uid  
  9.         [[Config Instance] saveUID:[[TBXML textForElement:uid] intValue]];  
  10.     }  
  11.     @catch (NSException *exception) {  
  12.         [NdUncaughtExceptionHandler TakeException:exception];  
  13.     }  
  14.     @finally {  
  15.           
  16.     }  
  17.       
  18. }  


在后面也看到[[MyThread Instance] startNotice];看看startNotice方法,是一个定时器,每隔60s刷新一下用户信息,是否有新的粉丝或几条评论;

[cpp]  view plain copy
  1. -(void)startNotice  
  2. {  
  3.     if (isRunning) {  
  4.         return;  
  5.     }  
  6.     else {  
  7.         timer = [NSTimer scheduledTimerWithTimeInterval:60 target:self selector:@selector(timerUpdate) userInfo:nil repeats:YES];  
  8.         isRunning = YES;  
  9.     }  
  10. }  

[cpp]  view plain copy
  1. -(void)timerUpdate  
  2. {  
  3.     NSString * url = [NSString stringWithFormat:@"%@?uid=%d",api_user_notice,[Config Instance].getUID];  
  4.     [[AFOSCClient sharedClient]getPath:url parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {  
  5.           
  6.         [Tool getOSCNotice2:operation.responseString];  
  7.           
  8.     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {  
  9.           
  10.     }];  
  11.       
  12. }  


url请求获取的返回的信息(已经登陆情开源中国社区网站的况下)
[html]  view plain copy
  1. <oschina>  
  2. <notice>  
  3. <atmeCount>0</atmeCount>  
  4. <msgCount>0</msgCount>  
  5. <reviewCount>0</reviewCount>  
  6. <newFansCount>0</newFansCount>  
  7. </notice>  
  8. </oschina>  
  9. <!-- 
  10.  Generated by OsChina.NET (init:1[ms],page:1[ms],ip:61.163.231.198)  
  11. -->  


关于本文提到的几个动画过渡显示效果请看

[Tool showHUD:@"正在登录" andView:self.view andHUD:request.hud];    MBProgressHUD特效

[Tool ToastNotification:[NSString stringWithFormat:@"错误 %@",error.errorMessage] andView:self.view andLoading:NO andIsBottom:NO];       GCDiscreetNotificationView提示视图




原创博客欢迎转载分享,请注明出处 http://blog.csdn.net/duxinfeng2010


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

开源中国iOS客户端学习——(十二)用户登陆 的相关文章

  • 汽配企业想上MES管理系统,需要具备哪些条件

    随着全球汽车行业的快速发展 汽配行业也面临着日益激烈的竞争和不断变化的市场环境 为了应对这种挑战 许多汽配企业开始考虑引入制造执行系统 MES 来提高生产效率和管理水平 然而 在实施MES管理系统解决方案之前 汽配企业需要具备一定的条件 以
  • 整理 mac 安装php扩展mcrypt

    这个问题是遇到多次了 不想再被坑了 首先使mcrypt软件能够运行 然后安装php扩展模块 并在php ini配置 这里注意的是mcrypt软件依赖libmcrypt和mhash两个库 所以安装配置顺序从右至左 下载安装mcrypt 1 先
  • Java Solr HTTPClient一般请求流程代码编写

    import com alibaba fastjson JSONObject import com digipower common page PageData 查询的策略模式 author zzg public interface Sea
  • 整理 firefox 和IE系列的相关差别,已备后用!

    一 IE与FireFox的js和css png透明 AlphaImageLoaderfilter progid DXImageTransform Microsoft AlphaImageLoader enabled bEnabled siz
  • STC32G资料及入门介绍

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 STC32G资料及入门介绍 前言 一 资料准备 二 工程介绍 1 文件架构 总结 前言 提示 这里可以添加本文要记录的大概内容 STC32G是STC新推出的32位单片机 也就
  • 2、OpenCV加载、显示、保存图像

    OpenCV加载 显示 保存图像 一 OpenCV加载图像 二 判断图像是否加载成功 三 窗体显示图片 四 保存图像 五 完整代码示例 六 其它关于图像保存的代码例子 七 致谢 一 OpenCV加载图像 1 所用函数原型 Mat cv im
  • CAN光纤转换器 CAN光端机在久远消防主机JB-TB-JF999-H上的应用

    火灾报警主机联网问题一直是各消防项目中的难点 特别是管廊等长距离通讯中 如何保证通讯信号长期稳定可靠的运行是需要工程重点解决的问题 而LCAN FOBR系列环网冗余式CAN光纤转换器提供二路光通道和一路CAN通道 实现CAN与光纤之间的双向
  • “文明上网”

    接下来 让我们通过一些司法案例来学习如何做到 文明上网 安全上网 吧 案例一 不听劝告沉溺网络 步步深陷堕入深渊 十四岁的韩某从小就迷恋网络 家人越是劝告越是不听 到后来甚至发展到通宵到网吧打游戏 2018年3月 因无钱上网玩游戏 韩某先后
  • ajax设置滚轮效果,用 jQuery 实现页面滚动(Scroll)效果的完美方法

    以前很多博主都写过 转载过用 jQuery 实现页面滚动 Scroll 效果的方法 但目前搜来的方法大都在 Opera 下有个小 Bug 直接用跳的而且画面闪烁 今天 超级低调的高手 Willin 共享了一种完美方法解决 jQuery 实现
  • 经典进程同步问题(三)——读者写者问题

    目录 一 问题描述 二 解题思路 2 1 读者优先算法 2 2 写者优先算法 2 3 读写公平 三 源码实现 3 1 读者优先 3 2 写者优先 3 3 读写平等 一 问题描述 一个数据问价或记录可以被多个进程共享 我们把只读该文件的进程称
  • 集成学习算法:Bagging和随机森林

    学习目标 知道Bagging集成原理 知道随机森林构造过程 知道RandomForestClassifier的使用 了解baggind集成的优点 1 Bagging集成原理 目标 把下面的圈和方块进行分类 实现过程 1 采样不同数据集 2
  • Wireshark抓包——ICMP协议分析

    内容 使用Wireshark抓包 分析较简单的数据包 环境 Windows 7 Wireshark ping是用来测试网络连通性的命令 一旦发出ping命令 主机会发出连续的测试数据包到网络中 在通常的情况下 主机会收到回应数据包 ping
  • 【Linux-GNU编译器套件(gcc/g++/gfortran)离线编译安装】

    文章目录 Linux centos7 9系统GNU编译器套件 gcc g gfortran 离线编译安装 一 GNU编译器套件定义 二 GNU GCC编译环境说明 三 GNU GCC编译安装 3 1 依赖软件包安装 3 2 gcc 7 5版
  • Hexo博文发布管理工具分享出来啦

    从此刻起 小白也能搭建自己的博客 说些什么呢 之前为朋友写的一个Hexo博客发布与管理工具 只需要点点鼠标即可实现对Hexo博文的管理 从此告别各种难记的cmd命令 赠人玫瑰 手有余香 实现功能 创建博文 修改名称 删除文章 复制 粘贴 剪
  • react函数组件

    一 函数组件 1 函数组件的创建 函数组件 使用JS的函数 或箭头函数 创建的组件称为函数组件 函数组件有如下约定 函数名称必须以大写字母开头 函数组件必须有返回值 返回JSX表达式 渲染函数组件 用函数名作为组件标签名 组件名称可以是单标
  • BGA封装扇出过孔-BGA芯片的布局布线技巧

    bga封装扇出过孔 图文并茂讲解BGA芯片的布局布线技巧 谁不言的博客 CSDN博客 因此处理BGA芯片的布局和走线已经成为工程师的必修功课 本篇文章将向大家介绍BGA芯片的布局布线技巧 BGA芯片布局的基本顺序 1 对BGA芯片进行摆放
  • 用python写一个爬虫程序,爬取百度的源码

    我可以为您提供一个简单的Python爬虫程序的示例 它可以帮助您爬取百度的源码 导入所需要的模块 import requests from bs4 import BeautifulSoup 获取百度源码 url https www baid
  • vue封装树形组件

    效果 1 组件

随机推荐

  • Apache Druid命令执行漏洞(CVE-2021-25646)复现

    0x00 漏洞概述 Apache Druid 是用Java编写的面向列的开源分布式数据存储 旨在快速获取大量事件数据 并在数据之上提供低延迟查询 Apache Druid 包括执行用户提供的JavaScript的功能嵌入在各种类型请求中的代
  • 硬链接和软连接的区别

    硬链接和软连接的主要区别在于 硬链接和源文件具有相同的inode节点号和block 硬链接和源文件是同一份文件 软连接和源文件的inode节点号不同 进而指向的block也不同 软连接block中存放了源文件的路径名 硬链接 源文件和硬链接
  • Postman 批量导出接口:如何快速备份你的 API

    在使用 Postman 接口测试工具时 我们可能会需要将多个接口进行导出 以备后续使用或与他人共享 下面将介绍如何使用 Postman 批量导出接口 步骤一 进入集合 首先 我们需要进入 Postman 中的集合 该集合中包含了我们需要导出
  • 数据库的部分依赖,完全依赖,传递依赖以及三种范式

    第一范式1NF 列不可再分 关系模式R都是不可分 第二范式2NF 满足完全依赖 可唯一标识一行 如主键id 消除部分依赖 如果依赖于主属性的非空真子集 那么就不满足完全依赖 要拆分成一对多的关系 第三范式3NF 不存在传递依赖 不依赖于非主
  • JSR303校验之list校验问题

    现有需求如下 新增合同时要保存补贴和费用项信息 由于都是多条 所以用list传参 但不是必传项 不传的时候不校验list中的对象 传的时候就要校验list中对象每个字段都不能为空 也就是要通过JSR303实现 当请求对象中传list 需要校
  • Springboot 多数据源配置

    Springboot 多数据源配置 前几天工作中遇到个项目说出来比较恶心 对接老系统要求一个项目连接多个数据库 Oracle Mysql SqlServer 这个时候看了一些方式写了一套多数据源常用的方式 将代码分享出来 后续会将代码整体迁
  • CSS —— 盒模型

    概念 CSS 盒模型本质上是一个盒子 盒子包裹着HTML 元素 盒子由四个属性组成 从内到外分别是 content 内容 padding 内填充 border 边框 外边距 margin 盒模型的分类 W3C 盒子模型 标准盒模型 IE盒子
  • Unity之性能分析特别篇

    Unity的性能优化大家一定很熟悉了 我在Unity4 5的时期 做过多款大型在线射击对战类网游 超大地形加载优化 对性能分析优化工作和在使用Profiler的过程中总结了一些经验 今天才有空分享出来 欢迎大家讨论 和提出不同的见解 给Un
  • 无法访问javax.servlet.ServletException

    使用Idea CE 创建了一个基于 Maven 构建的 Spring Boot 项目 在打包的时候提示 无法访问javax servlet ServletException 完整错误信息 ERROR Failed to execute go
  • Spring3学习笔记之(spring core之IoC容器基本原理)

    IoC容器的概念 IoC容器就是具有依赖注入功能的容器 IoC容器负责实例化 定位 配置应用程序中的对象及建立这些对象间的依赖 应用程序无需直接在代码中new相关的对象 应用程序由IoC容器进行组装 在Spring中BeanFactory是
  • C++ “error LNK1169: 找到一个或多个多重定义的符号”的解决方法

    原文链接 https blog csdn net m LeonWANG article details 37598807 这是一个链接时候检查到的错误 大概有下面两种情况会引起这个错误 第一种 1 变量定义 A h中声明了变量a 非类成员变
  • Kylin问题解决

    1 libLLVM 7 so不是符号链接 root t60 ldconfig v ldconfig usr lib64 libLLVM 7 so 不是符号链接 解 root t60 ln sf usr lib64 libLLVM 7 0 0
  • eKuiper 1.10.0 发布:定时规则和 EdgeX v3 适配

    经过为期两个月的开发 我们很高兴地宣布 eKuiper 1 10 0 现已正式发布 作为一个里程碑版本 eKuiper 1 10 0 升级了基础依赖的版本 如 Go 语言版本升级到 1 20 EdgeX 支持最新的大版本 Minnesota
  • layui自定义打印

    效果图如下 自定义内容导出 自定义表格导出 目录 一 自带的打印功能的实现 1 下载新的layui的js文件 2 添加toolbar参数 3 最终打印图标显示 4 点击打印图标 实现打印效果 5 隐藏打印功能 二 自定义打印内容的实现 1
  • nginx proxy_pass规则

    文章目录 nginx部分配置格式 proxy pass规则 1 proxy pass不带url情况 2 proxy pass带url情况 总结 以下附带一个简单的伪代码 新领悟 nginx部分配置格式 server listen 5000
  • 大数据从入门到精通(超详细版)之Hive的DQL操作,学不会算我输!!!

    前言 嗨 各位小伙伴 恭喜大家学习到这里 不知道关于大数据前面的知识遗忘程度怎么样了 又或者是对大数据后面的知识是否感兴趣 本文是 大数据从入门到精通 超详细版 的一部分 小伙伴们如果对此感谢兴趣的话 推荐大家按照大数据学习路径开始学习哦
  • 达梦实现高可用性的实现(failover功能/负载均衡/虚拟ip透明切换)

    达梦实现高可用性的实现 failover功能 负载均衡 虚拟ip透明切换 一 failover功能 基于守护进程和监视器两个内在工具实现 守护进程 监视器 数据守护和读写分离集群 共享存储集群 二 负载均衡 基于jdbc接口和客户端实现读写
  • XSS-Game level 11

    第十一关通过 Referer 利用事件绕过 先看源码 本关有三个参数 keyword 使用 htmlspecialchars 转译 并输出到页面 难度较大 第二个参数 t sort 使用 htmlspecialchars 转译后拼接到 va
  • Dubbo服务控制台Dubbo Admin配置

    Dubbo服务使用Zookeeper作为服务注册中心 Zookeeper对我们来讲是一个黑框 我们无法看到是否存在了什么提供者或消费者 阿里巴巴官方提供了一个Dubbo服务的管理平台Dubbo Admin 提供路由规则 动态配置 服务降级
  • 开源中国iOS客户端学习——(十二)用户登陆

    上一篇博客 开源中国iOS客户端学习 十一 AES加密 中提到将用户名和密码保存到了本地沙盒之中 在从本地读取用户名和密码 这是一个怎样的过程 cpp view plain copy void saveUserNameAndPwd NSSt