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-工程基础配置的主要内容,如果未能解决你的问题,请参考以下文章

UBuntu CMake工程配置基础

Yarn: 一个新的JavaScript模块管理器

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

VSCode自定义代码片段11——vue路由的配置

巧用Vscode编辑器,快速编辑代码,教你一键写完一段代码,向合格的cv工程师前进