IOS
当走的路甚远
这个作者很懒,什么都没留下…
展开
-
OC - Xcode编译报错library not found for -lAFNetworking
更新了macOS之后重新pod install了一下,结果之前好好的AFNetworking突然一直报错,始终是:ld: library not found for -lAFNetworkingclang: error: linker command failed with exit code 1 (use -v to see invocation)点击workspace中的pod工程标题,选择PROJECT中的Pods,在Build Settrings中搜索找到Build Active Arc.原创 2020-11-03 17:55:30 · 469 阅读 · 0 评论 -
OC - iOS 中判断应用程序是否为第一次打开
第一步:在AppDelegate中当应用启动完成后加入一下代码:- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //NSUserDefaults非常好用,并不需要用户在程序中设置NSUserDefaults的全局变量,需要在哪里使用NSUserDefaults的数据,那么就在哪里创建一个NSUserDefaults对象,然原创 2020-11-02 14:12:40 · 400 阅读 · 0 评论 -
OC WKWebView的使用
前言最近项目中的UIWebView被替换为了WKWebView,因此来总结一下。 示例Demo:WKWebView的使用 本文将从以下几方面介绍WKWebView:1、WKWebView涉及的一些类 2、WKWebView涉及的代理方法 3、网页内容加载进度条和title的实现 4、JS和OC的交互 5、本地HTML文件的实现一、WKWebView涉及的一些类WKWebView:网页的渲染与展示 注意: #import <WebKit/WebKit.h> ..转载 2020-07-31 10:16:17 · 1213 阅读 · 0 评论 -
iOS App内语言切换(国际化)
想要实现App内的语言切换功能,那么首先要创建国际化语言文件,用于存储对应语言显示的文本。1、创建国际化语言文件command+N,选择Other里面的Empty文件。我们将其命名为Localizable.strings选中刚才创建的文件,在其右侧的的属性栏中点击Localize按钮。2、设置项目需要支持的语言选中project--->info--->Localization。我们会发现里面默认有一个英语,我们可以点击左下角的➕号添加支持的语言。点击+号,选择简体原创 2020-07-13 19:30:57 · 4350 阅读 · 0 评论 -
OC 使用手机号获取验证码,添加国家编码
由于项目受众群里不是国内用户,所以在使用手机号获取验证码的时候需要添加国家编码。三行代码集成国家区号选择功能功能运行效果如图:国家代码 UI设置TextField的左paddingNSInteger m = 40;UIView *paddingView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, m, 40)];self.textField.leftView = paddingView;self.textField.l原创 2020-07-07 15:52:34 · 1112 阅读 · 0 评论 -
iOS app已经上架可供销售,但是在AppStore上搜不到的解决办法
app已经通过审核,状态为“可供销售”,但是在AppStore上死活不更新。百度了一下,说是修改价格和销售范围,等待半小时即可,亲测无效。还有看到一些说是这个操作只在下午的时候才有效,亲测也无效。后面等到晚上快下班的时候,自己就显示了,不用过于着急。在这里跟大家分享两种解决方案方案一:改价格、发行地区登录itunesconnect.apple.com 后台,进入app信息页; 点击价格与销售范围,把价格修改成6元(中国区价格),销售范围改成“中国”,点击保存; 保存后,不用等着,顺手 再把价原创 2020-07-07 14:48:36 · 5249 阅读 · 0 评论 -
OC 如何正确释放GCD定时器(dispatch_source_t)以及防止Crash
Dispatch Source Timer 的使用以及注意事项Dispatch Source Timer 是一种与 Dispatch Queue 结合使用的定时器。当需要在后台 queue 中定期执行任务的时候,使用 Dispatch Source Timer 要比使用 NSTimer 更加自然,也更加高效(无需在 main queue 和后台 queue 之前切换)。使用如下:@property (nonatomic,strong) dispatch_source_t timer;/**原创 2020-06-30 09:41:50 · 1154 阅读 · 0 评论 -
OC 设置ImageView圆角
先来看看圆角效果图:正常普通的ImageView是方形的,如何让ImageView变成圆角的呢。我们来看下,有几个地方需要设置。第一个参数:layer.masksToBounds第二个参数:layer.cornerRadius设置这两个参数就可以使ImageView变为圆角了。...原创 2020-06-28 10:08:46 · 1416 阅读 · 0 评论 -
OC 十六进制字符串转二进制字符串
//十六进制转换为二进制+ (NSString *)getBinaryByHex:(NSString *)hex { NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] initWithCapacity:16]; [hexDic setObject:@"0000" forKey:@"0"]; [hexDic setObject:@"0001" forKey:@"1"]; [hexDic setObject:.原创 2020-06-17 15:18:59 · 505 阅读 · 0 评论 -
OC 手机号正则表达式
- (BOOL)valiMobile:(NSString *)mobile { if (mobile.length != 11) { return NO; } /** * 手机号码: * 13[0-9], 14[5,7], 15[0, 1, 2, 3, 5, 6, 7, 8, 9], 17[0, 1, 6, 7, 8], 18[0-9] * 移动号段: 134,135,136,137,138,139,147,150,151,1.原创 2020-06-16 18:14:01 · 386 阅读 · 0 评论 -
OC UIButton addTarget:self action:@selector() 传多个参数
利用RunTime中的objc_setAssociatedObject函数可以轻松做到/** * Sets an associated value for a given object using a given key and association policy. * * @param object The source object for the association. * @param key The key for the association. * @param val原创 2020-06-11 16:27:03 · 1646 阅读 · 0 评论 -
Xcode no scheme
只需选中.xcodeproj右键显示包内容将xcuserdata文件夹下面的.xcuserdatad文件删除,保存一下。重新打开xcode编译一下就可以了。原创 2020-06-11 11:07:09 · 633 阅读 · 0 评论 -
OC date TimePicker控件中,显示24小时时间制,显示12小时时间制
dateTimePicker的时间显示@TOC12小时显示格式: format: ‘yyyy-mm-dd HH:ii:ss’,24小时显示格式: format: ‘yyyy-mm-dd hh:ii:ss’,原创 2020-06-08 10:07:08 · 1279 阅读 · 0 评论 -
OC UIDatePicker显示24小时制
self.datePicker.datePickerMode = UIDatePickerModeTime;self.datePicker.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];原创 2020-06-08 10:05:54 · 364 阅读 · 0 评论 -
OC 开发之NSLog使用技巧
前提:在XCode做开发调试时往往需要打印一些调试信息做debug用,大家知道当打印信息的地方多了之后在模拟器上跑可能不会有什么问题,因为模拟器用的是电脑的硬件但是当应用跑在设备上时这些输出语句会在很大程度上影响应用的性能,针对这种问题可以写一些宏来控制这些调试信息的输出。在release版本禁止输出NSLog内容因为NSLog的输出还是比较消耗系统资源的,而且输出的数据也可能会暴露出App里的保密数据,所以发布正式版时需要把这些输出全部屏蔽掉。我们可以在发布版本前先把所有NSLog..原创 2020-06-08 10:04:51 · 603 阅读 · 0 评论 -
OC tableView左滑删除的两种方法
第一种- (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath { //第二组可以左滑删除 if (indexPath.section == 2) { return YES; } return NO;} // 定义编辑样式- (UITableViewCellEditingStyle)tableView:(UITabl原创 2020-06-04 10:51:51 · 1317 阅读 · 0 评论 -
iOS 13那些默默无闻的坑
引言关于iOS 13适配,有非常多写的很不错的文章,本文主要讨论iOS 13对于蓝牙开发其中一个影响下面是一个小编认为关于iOS 13适配写得毕竟详细得文章,以供参考iOS 13适配正题蓝牙开发中,从蓝牙设备获取到的数据,都是以NSData的形式接收,有的时候需要将NSData数据转换为对应的十六进制字符串进行操作。例如,定义设备名称为厂商数据的某一个位置开始的N个字节方案一将NSData利用initWithData:encoding:将数据用UTF8解码转换成字符串.转载 2020-06-03 16:28:17 · 351 阅读 · 0 评论 -
OC 操作可变数组中的元素
//先删除,再插入- (void)removeObjectAtIndex:(NSUInteger)index;- (void)insertObject:(ObjectType)anObject atIndex:(NSUInteger)index;Product *message = (Product*)[notification object];Product *prod = nil;for(int i = 0; i < ProductList.count; i++){ .原创 2020-06-02 18:02:18 · 1121 阅读 · 0 评论 -
OC 十六进制转换为二进制
//十六进制转换为二进制+ (NSString *)getBinaryByHex:(NSString *)hex { NSMutableDictionary *hexDic = [[NSMutableDictionary alloc] initWithCapacity:16]; [hexDic setObject:@"0000" forKey:@"0"]; [hexDic setObject:@"0001" forKey:@"1"]; [hexDic setObject:.原创 2020-06-02 17:51:49 · 558 阅读 · 0 评论 -
OC performSelector和传递参数
performSelector和直接调用方法的区别performSelector: withObject:是在iOS中的一种方法调用方式。他可以向一个对象传递任何消息,而不需要在编译的时候声明这些方法。所以这也是runtime的一种应用方式。所以performSelector和直接调用方法的区别就在与runtime。直接调用编译是会自动校验。如果方法不存在,那么直接调用 在编译时候就能够发现,编译器会直接报错。但是使用performSelector的话一定是在运行时候才能发现,如果此方...原创 2020-06-01 10:13:09 · 2341 阅读 · 0 评论 -
OC AFNetWorking中block执行完后再执行其它操作
需求:同时进行两次网络请求,网络请求是异步的,在网络请求成功后进行其它的操作。两个网络请求是这样,一个网络请求中block执行完之后,再进行其它操作,也是一样的原理,只是这时候不需要线程组了,只需要信号量。当然也适用于所有的block。接下来就说下,在两次异步请求之后要做的操作。利用线程组和信号量来完成,看代码- (void)getData{ NSString *appIdKey = @"8781e4ef1c73ff20a180d3d7a42a8c04"; NSString*原创 2020-06-01 09:59:20 · 475 阅读 · 0 评论 -
OC 生成UUID
+ (NSString *)uuidString{ CFUUIDRef uuid_ref = CFUUIDCreate(NULL); CFStringRef uuid_string_ref= CFUUIDCreateString(NULL, uuid_ref); NSString *uuid = [NSString stringWithString:(__bridge NSString *)uuid_string_ref]; CFRelease(uuid_ref); .原创 2020-06-01 09:58:06 · 1336 阅读 · 0 评论 -
OC 开发时间控件强制24小时制
1)当你的format格式是NSDateFormatter*dateFormatter=[[[NSDateFormatteralloc]init]autorelease];[dateFormattersetDateFormat:@"yyyy-MM-ddHH:mm:ss"];//这里是用大写的HNSString*dateStr=[dateFormatterstringFromDate:date];你获得就是24小时制的。2)当你的format格式用的是[d...原创 2020-06-01 09:56:32 · 500 阅读 · 1 评论 -
OC 时间的几个函数及格式化时间
//// main.m// 时间格式化//// Created by Macro on 14-12-10.// Copyright (c) 2014年 Macro. All rights reserved.// #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //返回当前时间,以GM..原创 2020-06-01 09:55:10 · 389 阅读 · 0 评论 -
OC 获取当前日期是周几
+(NSInteger)getWeekDayFordate { NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; NSDateComponents *comps = [[NSDateComponents alloc] init]; NSInteger unitFlags = NSYearCalendarUnit | NSMonthCalend.原创 2020-06-01 09:54:09 · 686 阅读 · 0 评论 -
OC 圆弧渐变进度条的实现
由于项目需要一个环形渐变进度条显示课程,这方便网上的确有很多相关资料但是,都是比较零散的而且,大多数只是放一堆代码就算完了。这里我想详细写一篇我自己实现这个进度条的过程。实现一个圆弧进度条主要分为三步一、画圆弧这里用的贝赛尔曲线,就是这个东西:UIBezierPath二、根据贝塞尔曲线路径画两个圆弧一个底色一个上面的填充色,用到的是这个类CAShapeLayer.h三、画两个渐变色块,把上面的进度条路径映射到渐变色块上,渐变色块用的是这个东西CAGradientLayer.h目标效果如图原创 2020-06-01 09:50:11 · 1076 阅读 · 0 评论 -
OC 错误 “property follows cocoa naming convention for returning owned objects”
这两天都遇到这个错误2次了 第一次是 创建了一个 newpassword的textField属性 第二次是 申明了一个 类的对象 copyStateVC;property follows cocoa naming convention for returning 'owned' objects查了一番,终于知道原因:命名不规范 ,属性不能以关键字符开头。记得以前刚学OC的时候看到过,不能以alloc,new,copy,mutableCopy 作为开头命名,比如:newPassword,小细节没...原创 2020-05-31 13:52:31 · 1383 阅读 · 0 评论 -
OC NSArray NSMutableArray 创建 添加 查询 复制 遍历等
NSArray说明-oc中枚举就是遍历的意思,区别c语言中的枚举-Foundation中的数组(NSArray,NSMutableArray)是一组有序的对象集合-数组只能存储对象(类的实例)NSArray使用-通过下标获取到数组中的各个元素-与字符串相同,数组分为可变和不可变数组NSArray注意-数组中不可以存放基本数据类型,只能存放类的实例(对象)-如若需要将基本数据类型/结构体放入数组中,需要通过NSNumber NSValue进行“封装”NSArray实例.原创 2020-05-28 11:43:55 · 439 阅读 · 0 评论 -
OC中延时方法总结
//延时方法1[self performSelector:@selector(task) withObject:nil afterDelay:1];//延时方法2NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 target:self selector:@selector(task1) userInfo:nil repeats:false];//延时方法4[NSThread sleepForTimeInterval:1.0];//延时方法4.原创 2020-05-28 11:43:40 · 589 阅读 · 0 评论 -
ld: 1 duplicate symbol for architecture x86_64的错误
duplicate:重复的,复制的symbols:符号出现的原因:1.工程中重复倒入某一类或文件,这一般出现在你添加第三方库的时候比较多,在不知道的情况下又导入了一次相同的类。2.就是倒入类的时候,引用的是.m而不是.h3.项目中用了一个 C 语言的枚举类型定义方式,会导致重复闯将4.项目中使用c的时候,参数声明使用const2个人认为,因为const声明的是常量,static声明的是静态变量(只声明一次),所以我们在引用的时候,引用一次是没问题的,而引用多次,con原创 2020-05-28 11:42:12 · 4274 阅读 · 0 评论 -
OC NSInteger 和 NSNumber
Objective-C 支持的类型有两种:基本类型和类。基本类型,如同 C 语言中的 int 类型一样,拿来就可以直接用。而类在使用时,必须先创建一个对象,再为对象分配空间,接着做初始化和赋值。类的初始化,需用类自身的方法(类方法)。代码中所创建的对象,不用后,还得记着释放。NSNumber 是类,而 NSInteger 只不过是个基本类型。既然 NSInteger 是基本类型,那么,使用起来就非常简单。声明一个变量,NSInteger myInt;直接赋值就可以了。 比如:myInt = 8;谈到原创 2020-05-27 18:08:40 · 870 阅读 · 0 评论 -
oc 10进制转16进制字符串
//10进制转16进制字符串NSString *hexString= [NSString stringWithFormat:@"%@",[[NSString alloc] initWithFormat:@"%1lx",20]];原创 2020-05-27 18:05:39 · 401 阅读 · 0 评论 -
OC中static关键字作用
static关键字可以修饰函数和变量,作用如下:一、隐藏通过static修饰的函数或者变量,在该文件中,所有位于这条语句之后的函数都可以访问,而其他文件中的方法和函数则不行;二、静态变量类方法不可以访问实例变量(函数),通过static修饰的实例变量(函数),可以被类方法访问;三、持久static修饰的变量,能且只能被初始化一次;四、默认初始化static修饰的变量,默认初始化为0;...原创 2020-05-27 18:04:56 · 953 阅读 · 0 评论 -
OC 获取当前时间
//获取标准时间NSDate *date = [NSDate date];NSLog(@"直接使用NSDate获取的时间:%@", date);//使用formatter格式化后的时间NSDateFormatter *formatter = [[NSDateFormatter alloc] init];[formatter setDateFormat:@"yyyy-MM-dd HH-mm-ss"];NSString *time_now = [formatter stringFromDate:d.原创 2020-05-27 18:03:05 · 1610 阅读 · 0 评论 -
从AFNetworking中获取error中后台返回的错误信息
-在项目接口请求中,出现参数忘记带了的情况,后台直接返回400,在error中,后台可能有返回错误信息,如何获取这错误信息呢//在AFNetworking方法error代码块中if ([error.domain isEqualToString:AFURLResponseSerializationErrorDomain]) { // server error id response = [NSJSONSerialization JSONObjectWithData:error.user原创 2020-05-27 10:50:51 · 655 阅读 · 0 评论 -
iOS开发 字符串倒序的两种方式,首尾互换
在面试中,经常被问到字符串倒序的面试题,下面提供两种简单的实现:第一种:- (NSString*)reverseWordsInString:(NSString*)oldStr{ NSMutableString *newStr = [[NSMutableString alloc] initWithCapacity:oldStr.length]; for (int i = (int)oldStr.length - 1; i >= 0; i --) { uni..原创 2020-05-26 15:02:49 · 877 阅读 · 0 评论 -
OC NSMutableString 可变字符串,拼接,删除,插入,替换
NSMutableString *str = [NSMutableString stringWithFormat:@"lanouhenan"];//对于可变字符串的增删改方法, 都是在原字符串基础上进行修改, 所以修改之后的原字符串的内容发生变化, 所以无需返回值//1 在原字符串基础上拼接Frank[str appendFormat:@"Frank"];NSLog(@"%@", str);//2 在原字符串基础上拼接Frank[str appendFormat:@"%@", .原创 2020-05-26 15:00:54 · 742 阅读 · 0 评论 -
OC中的二进制字符串转十六进制字符串
-(NSString*)twoConvertSixteen:(NSString*)string{ NSString* strTen =[NSString stringWithFormat:@"%lu", strtoul ( [stringUTF8String],0,2)]; int num = [strTen intValue]; NSString* sixTeenString = [NSString stringWithFormat:@"%x",num]; .原创 2020-05-26 14:39:09 · 582 阅读 · 0 评论 -
IOS应用防止按钮连续点击
在软件开发项目中,我们经常会碰到点击按钮发送网络请求,或者点击按钮进行页面之间的逻辑跳转。但是有时候遇到一些卡顿的话,用户可能会失去耐心,然后疯狂的点击,这时候就会多次调用按钮触发的方法。在某些特定的情景下会导致页面重复push或者重复发送网络请求。这样的问题既对用户体验有影响,而且还会一定程度上增加服务器的压力。下面详细讲解几种解决思路,有不完善的地方 希望大家能够纠正。1.在按钮的触发方法内部做处理首先创建一个按钮button@interface ViewController ()@原创 2020-05-25 17:50:21 · 1162 阅读 · 0 评论 -
iOS UIDatePicker的使用
一:UIDatePicker的介绍UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期、时间和持续时长的输入。日期选取器的各列会按照指定的风格进行自动配置,这样就让开发者不必关心如何配置表盘这样的底层操作。你也可以对其进行定制,令其使用任何范围的日期。UIDatePicker这个类的对象让用户可以在多个车轮上选择日期和时间。iPhone手机上的‘时钟’应用程序中的时间与闹铃中便使用了该控件。使用这个控件时,如果你能配置原创 2020-05-25 17:45:15 · 5579 阅读 · 0 评论