iOS开发-常见错误和警告总结

NSString是大家最常用的一个类,几乎人人都脱离不开,它的功能非常强大,但是它其中有点奥秘直到碰到了才发现。

正文:
NSString的API中有一个rangeOfString:,这个也是大家常用的在字符串中查找的的Api。我一般图省事,都是用这个,很少用rangeOfString:option:

正是因为偷懒,才导致了我一个crash,真是记忆深刻。
下面,我先举一个例子:

明明有一个":",结果就是找不到.这样导致了我以后代码出现的crash。这次不是说这个crash,而是要找到原因,为啥这个":",找不到呢。

打印一下length,竟然是2。那为啥找不到呢.换一种方式:

找到了!!!!!
问题解决了,但是为啥会这样呢?

这个就得看看Unicode的构成了。
Unicode对于组成有两种形式:合成形式与分解形式。
而NSString的rangeOfString,这个api对此的支持是这样的。rangeOfString,默认不是按照码元来查找的,也就是不是按照literalSearch.虽然它里面包含":",但是,这两个字符可以合成另一个与其等价的字符,所以就找不到了。

合成字符有的在Unicode字符表中有对应的形式,有的没有。我举得例子就没有。这得根据各种字符的具体规则定义,比如字符+西里尔字母,就能组出很多种奇怪的字符。

提醒:
如果要在NSString查找字符,一定要带上option。因为NSString与Unicode还是有很多坑的。

时间: 2024-08-07 21:17:36

iOS开发-常见错误和警告总结的相关文章

iOS开发 常见错误

一.NSAppTransportSecurity 错误提示:NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802) iOS9让所有的HTTP默认使用了HTTPS,原来的HTTP协议传输都改成TLS1.2协议进行传输.直接造成的情况就是App发请求的时候弹出网络无法连接.解决办法就是在项目的info.plist 文件里加上如下节点: NSAppTransportSecurity - NSAllow

iOS开发常见错误解决方法

1.出现下面的错误: StoryboardApp[8593:207] Failed to instantiate the default view controller for UIMainStoryboardFile 'MainStoryboard' - perhaps the designated entry point is not set? 这个问题的原因应该是在你的StoryBoard中没有一个view controller设置了Initial Scene.您需要选择一个view co

iOS开发常见错误

错误1: 1.1这种错误都是storyboard有问题 解决:当前storyboard的Custom Class是MJViewController,代码中MJViewController继承自UITableViewController. 而storyboard目前提供的是UIViewController,并没有为MJViewController提供TableView.这样的话就会报上图中的错. 控制器中真实的控制器类型 解决问题的方法是删除掉storyboard中的原来的UIViewContro

IOS开发常见错误整理

1.Cannot create an NSPersistentStoreCoordinator with a nil model 这是在执行到这段代码时引发的: 1 - (void)viewDidLoad { 2 [super viewDidLoad]; 3 UIApplication *application = [UIApplication sharedApplication]; 4 id delegate=application.delegate; 5 self.context=[dele

Mac & iOS开发常见错误

 1Xcode左侧不显示工程文件目录,提示NO Filter Results 解决办法:What solved was to go to Navigate > Reveal in Project Navigator. After this, the structure appeared again.

iOS开发——错误总结篇&开发中常见错误和警告总结(三十三)

开发中常见错误和警告总结(三十三) 动画冲突 错误: Unbalanced calls to begin/end appearance transitions for <uivewcontroller> 解决方法1:去掉动画 解决方法2:监听当前view的动画是否完成 解决方法就是,加一个BOOL型的变量,检查是否在做动画. 1 2 if (transiting) { 3 return; 4 } 5 transiting = YES; 6 [self transitionFromViewCon

ios开发——开发总结篇&amp;开发中常见错误和警告总结(五)

开发中常见错误和警告总结(五) 一.Missing file xxx 如果你在finder中删除了工程里面的文件,xcode上会出现一个警告,Missing file xxx, 有个警告在那恨事不自在.上网着了下,发现了如下解决方法: 1.打开terminal, cd 到刚才你删除的文件的文件夹,就是xcode提示你missing的文件夹 2.执行 svn delete missFileName  二.LLVM GCC Warning 4.3默认使用的是ARC编译,不是原来的GCC编译,所以你编

Android NDK开发常见错误

错误一: make: *** No rule to make target `/cygdrive/d/1-workspace/showmap-android-opengles/jni/showmap_opengles_OpenGLESRenderer.c', needed by `/cygdrive/d/1-workspace/showmap-android-opengles/obj/local/armeabi/objs/OpenGLESMap/showmap_opengles_OpenGLES

Protel DXP画原理图常见错误与警告

一.警告信息 警告信息对于将来转换成PCB不会造成严重问题,通常可以忽略.但它也给我们提供了一些参考,比如unconnceted pin能告诉我们芯片的哪些管脚没有连接,很有检错意义. 1.has no drving source 2.has multiple names 3.off grid pin 原因: ① 制作原理图元件时,管脚长度.图形长度等不是当前原理图的最小格点间距的倍数. ② 放置原理图元件的时候,没有让它的管脚处于格点上 4.unconnceted pin 二.错误信息 错误信

iOS开发 日常错误积累

1.ios7 tableviewcell上面添加一个view,view上面有button,点击button不执行button的点击事件 解决办法: self.view.userInteractionEnabled = YES; [cell.contentView addSubview:self.view] 主要问题是cell的高度没有view本事的高度高,造成view没有完全在cell上,所以点击事件执行不了. 2.ios7 tableviewcell上面有button,但是button的点击效