iOS-BaseConfig-工程基础配置
Posted 淡然微笑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS-BaseConfig-工程基础配置相关的知识,希望对你有一定的参考价值。
Xcode Workspace就如同工厂, Xcode Project如同车间,每个车间可以独立于工厂来生产产品( project可独立于 workspace存在),但是各个车间组合起来就需要工厂来组织(如果用了 cocopods,就需要用 workspace)。 Xcode Target是一条条的流水线,一条流水线上面只生产一种产品。 Build Settings是生产产品的秘方,如果是生产汽水, Build settings就是其中各个原料的配方。 Xcode scheme是生产方案,包含了流水线生产,秘方,还包含生产完成之后的质检(test)
1> ios 真机测试包路径:
点击->前往->前往文件夹 : /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
2> 超级头文件Pch 配置:Build Settings ->prefix header :$(SRCROOT)/工程名/类名
3>Bitcode设置:
Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allowApple to re-optimize your app binary in the future without the need to submit anew version of your app to the store.
说的是bitcode是被编译程序的一种中间形式的代码。包含bitcode配置的程序将会在App store上被编译和链接。bitcode允许苹果在后期重新优化程序的二进制文件,而不需要重新提交一个新的版本到App store上。
bitcode选项默认是设置为YES的。我们可以在”Build Settings”->”Enable Bitcode”->设置为No
Other Linker Flags设置
unrecognized selector sent to class 0x117e7c858 类扩展的坑
错误原因:Other Linker Flags 链接设置错误导致类扩展不知道如何正确读取,找不到类方法而产生的错误。
发证这个Bug的原因主要是因为写了扩展类之后没有在TATGETS->Build Settings->Other Linker Flags 里边添加正确的链接或者根本没添加链接,一般而言,如果是自己在项目中写扩展类,运行时都会自动添加的,如果这种情况实在是出了问题,那就自个儿在Xcode左边文件目录栏把对应的扩展方法文件拖进Other Linker Flags里边,它会自动生成链接的,绝对比你自己写的地址准确。但是如果是接入的静态库或者动态库,你就没有办法了,所以这个时候需要在Other Linker Flags后边添加"-all_load"、"-ObjC"、“-force _load”
关于这三个的使用场景,因为我自己使用"-all_load"后问题就解决了,所以我觉得我的这个问题可能不足以测试出这三者的区别
https://www.jianshu.com/p/7579eda7cbef
4>微信支付处理和友盟库冲突
//点击工程->Build Settings -> Library Search Paths 删除不引用的库 解决冲突
5.XCode环境变量及路径设置
一般我们在xcode里面配置包含工程目录下头文件的时候,都要关联着相对路径和绝对路径,如果只是自己用这个项目,用绝对路径的问题不大,但是如果你把工程发给别人,别人就要在改这个绝对路径,这时候绝对路径的缺点立马出现。
所以在修改User Header Search Paths这个选项的时候使用"$(SRCROOT)/当前工程名字/需要包含头文件所在文件夹"
将上面的双引号里面的字符串拷贝之后,你会发现这个“$(SRCROOT)”,会自动变成当前工程下的目录。这样就可以了,发给别人,别人也不用在去修改路径了。
$(SRCROOT)/include/**表示根目录include目录下所有头文件
6.userInteractionEnabled属性:设置为NO,在其下面的层级不会受影响,再其上面的控件、按钮无法点击;设置为YES,则可以点击。
例如:bgScrollView在视图最底层,上面加的是bgView, shadowView先添加在bgView, UIButton后添加在bgView上,此时按钮可以点击。
7.代码块添加方式
注释语法格式:<#代码块内容#>
尖括号—两个#号—中间是可添加的注释
8.导航条字体样式设置
// 1.设置左右两个Baritem 的字体颜色 self.navigationController.navigationBar.tintColor = [UIColor redColor]; // 2.设置标题字体大小和文本颜色 [self.navigationController.navigationBar setTitleTextAttributes: @{NSFontAttributeName:[UIFont systemFontOfSize:19], NSForegroundColorAttributeName:[UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1]}]; // 3.设置导航条的背景颜色 self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
9.第一次进入某个页面设置键盘弹出
[self performSelector:@selector(showKeyboard) withObject:nil afterDelay:0]; - (void)showKeyboard { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [_inputTopic becomeFirstResponder]; }); }
10.交换两个按钮的位置
CGRect rect; rect = button.frame; button.frame = button01.frame; button01.frame = rect;
11.字符串Url汉字转化
NSString * str = @"下午上课了"; // [str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [str stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
12.给应用添加自定义字体
//1.找到系统的字体册,ShowInFinder一下,找到自己想要的字体,拖入到工程中去() //2.在Info.plist文件中添加Key值 Information Property List->Fonts provided by application->item0 string->双击添加(XingKai.ttc)WawaSC-Regular.otf //3.在ViewDidLoad里面遍历输出FamilyName for (NSString * str in [UIFont familyNames]) { NSLog(@"%@",str); } //4.使用 A label 设置字体 label.font = [UIFont fontWithName:@“XingKai SC” size:30]; A label 设置字体粗细 label.font = [UIFont boldSystemFontOfsize:30]; B Button 设置字体 button.titleLabl.font = [UIFont fontWithName:@“XingKai SC” size:30];
13.延时调用的方法是什么?如何取消延时调用?
//触发延时调用 self performSelector: [self performSelector:@selector(smallQianHeAnimation) withObject:nil afterDelay:3]; //延时调用取消 NSObject cancelPreviousPerformRequestsWithTarget [NSObject cancelPreviousPerformRequestsWithTarget:self selector:@selector(smallQianHeAnimation) object:nil];
14.两个App跳转
应用程序之间的跳转(AppOne-AppTwo) AppOne配置 第一.gotoAppTwo按钮的点击事件 //应用程序之间的跳转 (在AppTwo添加key值 info.plist—>URL types—>URL Schemes—->item0—>在后面空白处添加string—AppTwo可以随便写,但是你要记得住,一般写你的这个工程的名字)) [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"AppTwo://?name=bb&psw=789&URL=AppOne"]]; 第二.AppTwo界面配置 //1.在入口类方法AppDelegate.m中. //1.URLKey:NSURL: 要跳转的那个应用程序的URL //2.SourceApplicationKey: 跳过来的那个应用程序的名字 //2.用提示框显示出来 UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"tips" message:[NSString stringWithFormat:@"%@",launchOptions] delegate:nil cancelButtonTitle:@"知道了!" otherButtonTitles:nil, nil]; [alertView show]; //3.设置让通知延迟调用 [self performSelector:@selector(post:) withObject:launchOptions afterDelay:1]; //4.发送通知 - (void)post:(NSDictionary *)dic{ [[NSNotificationCenter defaultCenter] postNotificationName:@"getdata" object:dic]; //5.ViewController.m中接收通知 @property(nonatomic,copy)NSString * getUrl; 接收通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getData:) name:@"getdata" object:nil]; - (void)getData:(NSNotification *)noti{ //1.用字典来接收object这个对象 NSDictionary * dic = noti.object; //2.从字典中取出 要跳转的那个应用程序的URL NSURL * url = dic[UIApplicationLaunchOptionsURLKey]; //3.//将URL转化为字符串 NSString * urlStr = url.absoluteString; //4.用? 把字符串分割 NSArray * urlArr = [urlStr componentsSeparatedByString:@"?"]; //5.取出问号之后的内容 NSString * str1 = [urlArr lastObject]; //6.用&分割 NSArray * dataArr = [str1 componentsSeparatedByString:@"&"]; //7.取出firstObject name=bb NSString * nameStr = [dataArr firstObject]; //8.用=分割 NSArray * tempArr = [nameStr componentsSeparatedByString:@"="]; //9.取出Lastobject - bb _showLabel.text = [tempArr lastObject]; //10. 设置返回键 (首先在AppOne 设置key值) 并在URL后面拼接 info.plist—>URL types—>URL Schemes—->item0—>在后面空白处添加string—AppOne NSString * dataUrl = [dataArr lastObject]; self.getUrl = [[dataUrl componentsSeparatedByString:@"="] lastObject]; //11.显示在弹出框里面 UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"温馨提示" message:urlStr delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; [alertView show];//让弹出框显示出来 // 让字符串显示在label上 } //返回按钮的点击事件 //设置成通用的按钮,在后面的URL里面拼接URL=&AppOne - (IBAction)backButtonClick:(UIButton *)sender { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@://",self.getUrl]]]; }
15.tag作用
一、for循环中 tag值 的作用
tag:标签。UI控件的一个属性,可以用来区分控件,找控件
①tag值相当于给控件添加一个编号,用来区分控件 多个按钮绑定同一个点击事件 用来区分点击的是哪个按钮
②(找控件)
点击同一个按钮呈现不同的点击事件
区分控件
二、找控件
①多个按钮绑定同一个点击事件 如何区分点击的是哪个按钮(找不同)
②点击同一个按钮,呈现不同的点击事件
③找控件 View
16.基本类型转换
//布尔类型转字符串 BOOL change; [NSString stringWithFormat:@"%d",change]; //字符串 转化成 基本类型 // 字符串 转化成 基本类型 int userAnswer = [textField.text intValue]; // 将基本类型转化成字符串类型-->字符串拼接 NSString *name = [NSString stringWithFormat:@"%d.jpg",count%4]; backImageView.image = [UIImage imageNamed:name]; //1.把 字符串 转化成 基本类型 int userAnswer = [textField.text intValue]; //2.把 字符串 转化成 浮点型 float userAnswer = [textField.text floatValue]; //3.把 整型 转化成 字符型 NSString *userAnswer = [NSString stringWithFormat:@“%d.jpg”,i]; //4.把 浮点型 转化成 字符型 NSString *userAnswer = [NSString stringWithFormat:@“%f.jpg”,i]; //5.字符串转化为具体的类 if(sender.tag>arr. count)return; NSString * className = arr[sender.tag]; 将取出来的类的名字,根据名字转化成具体的类 Class class = NSClassFromString(className); //6.将Data数据转化为字符串(NSUTF8StringEncoding) NSString * str = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
17.NSMutableAttributedString 设置居中
//需要点击的字符不同 NSString *label_text2 = @"和彩印用户服务协议与隐私政策"; NSMutableAttributedString *attributedString2 = [[NSMutableAttributedString alloc]initWithString:label_text2]; [attributedString2 addAttribute:NSFontAttributeName value:kBoldFont(26*gScale) range:NSMakeRange(0, label_text2.length)]; [attributedString2 addAttribute:NSForegroundColorAttributeName value:XBHexString(@"#459bff") range:NSMakeRange(0, 9)]; [attributedString2 addAttribute:NSForegroundColorAttributeName value:ALLOCCOLOR(0xff9B9B9B) range:NSMakeRange(9, 1)]; [attributedString2 addAttribute:NSForegroundColorAttributeName value:XBHexString(@"#459bff") range:NSMakeRange(10, 4)]; NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc] init]; paragraphStyle.alignment = NSTextAlignmentCenter;// 设置文字居中 [attributedString2 addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:NSMakeRange(0, [label_text2 length])]; protocolLbl.numberOfLines = 2; protocolLbl.attributedText = attributedString2; [protocolLbl tapActionWithBlcokStrings:@[@"和彩印用户服务协议",@"隐私政策"] tapClicked:^(NSString *string, NSRange range, NSInteger index) { // NSString *message = [NSString stringWithFormat:@"点击了“%@”字符\\nrange: %@\\nindex: %ld",string,NSStringFromRange(range),index]; // [HKMessageBox showMessage:message]; if ([string isEqualToString:@"和彩印用户服务协议"]) { XBProtocolViewController * vc = [[XBProtocolViewController alloc] init]; [self.navigationController pushViewController:vc animated:YES]; }else if ([string isEqualToString:@"隐私政策"]) { XBPrivacyViewController * vc = [[XBPrivacyViewController alloc] init]; [self.navigationController pushViewController:vc animated:YES]; } }];
Xcode隐藏ToolBar之后怎么让它再次显示出来:双击工程--showToolBar
18.枚举简单定义:
typedef enum { /** 全部 */ HKTopicTypeAll = 1, /** 图片 */ HKTopicTypePicture = 10, /** 段子 */ HKTopicTypeWord = 29, /** 声音 */ HKTopicTypeVoice = 31, /** 视频 */ HKTopicTypeVideo = 41 } HKTopicType; typedef NS_ENUM(NSUInteger, HKTopicType) { /** 全部 */ HKTopicTypeAll = 1, /** 图片 */ HKTopicTypePicture = 10, /** 段子 */ HKTopicTypeWord = 29, /** 声音 */ HKTopicTypeVoice = 31, /** 视频 */ HKTopicTypeVideo = 41 };
19.修改网页字体大小和背景颜色
//document.getElementsByTagName(\'img\'); //document.getElementById(\'jsParamFuncSpan\').innerhtml //document.getElementsByTagName(\'body\')[0].outerHTML //document.getElementsByClassName(\'标签的类名\') //document.getElementsByClassName(\'adpic\')[0].style //document.getElementsByTagName(\'img\')[0].src //document.getElementsByTagName(\'img\')[0].src //document.getElementsByTagName(\'img\')[0].src=\'http://findicons.com/files/icons/132/software_files/512/png.png\' //document.getElementsByClassName(\'component-container\')[0].style.background=\'RGBA(0,0,0,1)\' 直接修改网页图片 NSString * script = @"document.getElementsByTagName(\'img\')[0].src=\'http://findicons.com/files/icons/132/software_files/512/png.png\'"; [self.webView evaluatejavascript:script completionHandler:nil] ; -(void)webView:(WKWebView*)webView didFinishNavigation:(WKNavigation*)navigation{ [self.loadingView dismiss]; [self.webView evaluateJavaScript:[XBSkinInstance getWebViewBgColor] completionHandler:nil] ; UIColor * color = [XBSkinInstance getCurrentNavBgColor]; if ([Ctx isLightColor:color]) { [self.webView evaluateJavaScript:[XBSkinInstance getWebViewLightTextColor] completionHandler:nil] ; }else { [self.webView evaluateJavaScript:[XBSkinInstance getWebViewDarkTextColor] completionHandler:nil] ; } } - (NSString *)getWebViewBgColor{ //[NSString stringWithFormat:@"document.body.style.background=\'RGBA(0,0,0,0.2)\'"] NSString * webBgUserScript = [NSString stringWithFormat:@"document.body.style.background=\'RGBA(0,0,0,0.2)\'"]; return webBgUserScript; } - (NSString *)getWebViewLightTextColor { //document.getElementsByTagName(\'body\')[0].style.webkitTextSizeAdjust= \'300%\' //document.getElementsByTagName(\'body\')[0].style.webkitTextFillColor= \'#9098b8\' //@"document.getElementsByTagName(\'body\')[0].style.webkitTextFillColor= \'RGB(255,255,255)\'"; NSString * webLightTextScript = @"document.getElementsByTagName(\'body\')[0].style.webkitTextFillColor= \'RGB(0,0,0)\'";//黑色 return webLightTextScript; } - (NSString *)getWebViewDarkTextColor { NSString * webDarkTextScript = @"document.getElementsByTagName(\'body\')[0].style.webkitTextFillColor= \'RGB(255,255,255)\'";//白色 return webDarkTextScript; }
20.ARC/MRC交换管理权
ARC只能管理foundation框架的变量,如果程序中把foundation框架中的变量强制转换Core_Foundation框架的变量,需要交换管理权
非ARC-ARC:插入-fobjc-arc
ARC- 非ARC:插入-fno-objc-arc
21.远程推送的原理就是:
//1.手机或者说苹果自动将用户的UDID和应用的AplD发送到APNs,APNs返回一个 device Token给ioS设备,同一个手机不同的应用会生成不同的 device loken,同一个手机同一个应用只生成一个 device oken; //2手机端将 device Token发送到自己公司的后台服务器,用以保存; //3当后台需要推送消息给用户时,服务器将需要推送的消息和 device oken传输给APNs; //4“APNs将消息推送给指定的 device Token对应的手机5用户接收消息;
22.给一个空指针发送消息会发生什么?
函数不会执行无意义的操作,直接返回。
23.设置视图View旋转90°显示
XBBookCompletePromptView * completeView = [[XBBookCompletePromptViewalloc] initWithFrame:CGRectMake(0, 0, SCREEN_HEIGHT, SCREEN_WIDTH) withDelegate:self]; completeView.center = CGPointMake(SCREEN_WIDTH/2, SCREEN_HEIGHT/2); [self.view addSubview:completeView]; completeView.transform = CGAffineTransformMakeRotation(M_PI/2);
24.价格处理优化 :四舍五入保留一位小数
float a = 1412.244019; NSLog(@"a is %f", a); //output a is 1412.244019 a = [[NSString stringWithFormat:@"%.2f", a] floatValue]; NSLog(@"a is %f", a); //output a is 1412.239990 //1. 您是否尝试过这个? CGFloat val = 37.777779; CGFloat rounded_down = floorf(val * 100) / 100; /* Result: 37.77 */ CGFloat nearest = floorf(val * 100 + 0.5) / 100; /* Result: 37.78 */ CGFloat rounded_up = ceilf(val * 100) / 100; /* Result: 37.78 */ NSLog(@"rounded_down:%.1f\\nnearest:%.1f\\nrounded_up:%.1f",rounded_down,nearest,rounded_up);
25.获取tableviewCell在当前屏幕中的坐标值
CGRect rectInTableView = [tableView rectForRowAtIndexPath:indexPath]; CGRect rect = [tableView convertRect:rectInTableView toView:[tableView superview]]; NSLog(@"==rectInTableView:=%@",NSStringFromCGRect(rect));
26.获取当前页面是push 还是present过来的
NSArray *viewcontrollers=self.navigationController.viewControllers; if (viewcontrollers.count>1) { if ([viewcontrollers objectAtIndex:viewcontrollers.count-1]==self) { //push方式 [self.navigationController popViewControllerAnimated:YES]; } }else{ //present方式 [self.navigationController dismissViewControllerAnimated:YES completion:nil]; }
28.Xcode工程清理:
干净的工程 (三清)
1- 清理所有缓存数据 (Xcode—偏好设置——DerivedData文件下全部清空—最后Product—Clean)
2- (window——Projects)
3- 工程中蓝色工程文件—右键—shows in Finder —右键显示包内容 ——(齿轮文件不可删除)
29.返回带Tabbar的首页
//返回首页 -(void)goHome { for (UIViewController *controller in self.navigationController.viewControllers) { if ([controller isKindOfClass:[HKHomeViewController class]]) { [self.navigationController popToViewController:controller animated:YES]; } } 方法:2: self.navigationController.tabBarController.hidesBottomBarWhenPushed=NO; //0表示返回到tabor第一个按钮的主页面,依此类推 self.navigationController.tabBarController.selectedIndex=0; }
30.第一次进入,让键盘弹出
视图将要出现时<ViewWillAppear> [selfperformSelector:@selector(showKeyboard) withObject:nilafterDelay:0]; viewDidLoad之后 - (void)showKeyboard { dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ [_inputTopic becomeFirstResponder]; }); }
31.导航条字体样式设置
// 1.设置左右两个Baritem 的字体颜色 self.navigationController.navigationBar.tintColor = [UIColor redColor]; // 2.设置标题字体大小和文本颜色 [self.navigationController.navigationBar setTitleTextAttributes: @{NSFontAttributeName:[UIFont systemFontOfSize:19], NSForegroundColorAttributeName:[UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1]}]; // 3.设置导航条的背景颜色 self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
32.按钮无法点击原因:
第一,可能你的按钮根本就没有实例化对象,
第二,实例化对象了,但是没有加载到View上,
第三,加载到View上了,但是Frame不对,超出试图了
第四,Frame也存在,但是隐藏了按钮
在imageView上面添加button 不能点击原因
①imageView父视图的交互性未打开打开
②UIButton一定要在父视图之内
超出父视图之外 不能点击
33.XIB屏幕适配常用:
屏幕适配【AutoLayOut—SizeClasses 】 Leading ->左边约束 Trailing->右边约束 Top->顶部约束 Bottom->底部约束 Center Horizontally In container 水平居中【trailing】 Center Vertically In container 中心垂直 Equal Widths Equal Heights 方向比例约束:Aspect Ratio Constaint Constant:间距,间隔 Priority:优先级 Multiplier:宽高比例
34.将所有警告设置为报错:
Build Settings->error->Treat Warnings as Errors :YES
35.主线程卡死(案例)
①setData时不要使用延迟加载
-(void)setDataArray:(NSArray *)dataArray{ //SetData时不要使用延迟加载 dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ _dataArray = dataArray.mutableCopy; [jingxuanDataSource setDataArray:dataArray.mutableCopy]; [self reloadData]; }); }
36.SDCycleScrollView图片显示加载不全
设置imageView的contentMode
//解决办法 - (void)setupImageView { UIImageView *imageView = [[UIImageView alloc] init]; _imageView = imageView; _imageView.backgroundColor = ColorWithRGB(242, 242, 242); _imageView.contentMode = UIViewContentModeScaleToFill; [self addSubview:imageView]; }
37.TextField过滤特殊字符
//过滤其他字符-/()%^&$ -(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ if (textField == _userNickNameTextField||textField==_babyNickNameTextField) { NSUInteger lengthOfString = string.length; //lengthOfString的值始终为1 for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) { unichar character = [string characterAtIndex:loopIndex]; //将输入的值转化为ASCII值(即内部索引值),可以参考ASCII表 // 48-57;{0,9};65-90;{A..Z};97-122:{a..z} if (character < 48) return NO; // 48 unichar for 0 if (character > 57 && character < 65) return NO; // if (character > 90 && character < 97) return NO; if (character > 122) return NO; } // Check for total length NSUInteger proposedNewLength = textField.text.length - range.length + string.length; if (proposedNewLength > kMAXPASSWORDLIMIT) { return NO;//限制长度 } return YES; } return YES; } -(void)textFiledDidEditingChanged:(NSNotification *)obj{ for (UITextField *textField in tempArray) { NSString *toBeString = textField.text; //获取高亮部分 UITextRange *selectedRange = [textField markedTextRange]; UITextPosition *position = [textField positionFromPosition:selectedRange.start offset:0]; // 没有高亮选择的字,则对已输入的文字进行字数统计和限制 if (!position) { //手机号显示 if (textField.tag == USERNICKNAME_TEXTFIELD_TAG) { if (toBeString.length > kMAXUSERNICKNAMECOUNTLIMIT) { NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, kMAXUSERNICKNAMECOUNTLIMIT)]; textField.text = [toBeString substringWithRange:rangeRange]; } }else if (textField.tag == BABYNICKNAME_TEXTFIELD_TAG) { if (toBeString.length > kMAXBABYNICKNAMECOUNTLIMIT) { NSRange rangeRange = [toBeString rangeOfComposedCharacterSequencesForRange:NSMakeRange(0, kMAXBABYNICKNAMECOUNTLIMIT)]; textField.text = [toBeString substringWithRange:rangeRange]; } } } } }
38.进制转换
进制转换 //十进制--->二进制 /* 对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。 对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。故该法称“乘基取整法”。 */ 十进制,比如:6,如果将它转换成二进制数是110.从下往上读 被除数 计算过程 商 余数 6 6/2 3 0 3 3/2 1 1 1 1/2 0 1 //二进制--->十进制 二进制数100 换算成十进制 用横式计算为: 0*2^以上是关于iOS-BaseConfig-工程基础配置的主要内容,如果未能解决你的问题,请参考以下文章