壹拾肆

有些安排是多余的 这片空旷对我有益

一、前言

  在维护一个项目时碰见一个问题,调用了一个方法后不起作用,这种问题一般有两个解决思路,一个是看方法有没有起作用,另一个是看是不是其他的方法打断了这个方法,比如设置 UIButton 的隐藏,但在另一个地方,又把它设置成显示了。这种问题在工程里通过调试代码一般都很好解决。
  但是当它发生在我调用了一个 SDK 方法不起作用时,按照上文的思路,一查看是否是 SDK 方法的问题,这个除了向 SDK 提供人员反应没有其他更好的解决方法了,二是查看是否其他地方也调用了这个方法,使用了不同的参数导致本次的调用失效了。如果这个方法调用的少,可以全局搜索,然后注释掉方法,但是如果之前项目不是你开发的,你只是后期切入进来,同时代码结构一时半会还不能很好把握到,总之想快速利落的排除问题,这时你可以考虑用 Runtime 的特性,把 SDK 里的方法用自己写的替换掉。
  先老调重弹一遍,什么是 Runtime?   

阅读全文 »

  下午在测试一个语音 SDK 的时候,发现打印出来字典里的中文汉字都显示为 UTF-8 的字符,百度了一下解决办法,发现大都是用给 NSArrayNSDictionary 创建分类的方法解决的,但是很多文章可能是写的匆忙,或者是复制粘贴的,不够美观和一目了然。而且创建分类的方式,对比我以前用小码哥的一个类来说,多了一个 .h 文件,不够精简。所以就做个笔记,留作备用。
  首先新建一个 OC 的 .m 文件,不知道怎么新建也可以直接,创建普通的 UIVIew 的类,把 .h 删除,把 .m 所有除注释以外代码删除,修改成如下文所示一致就好。   

Objective-C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#import <Foundation/Foundation.h>

@implementation NSDictionary (Log)
- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];

// 开头有个{
[string appendString:@"{\n"];

// 遍历所有的键值对
[self enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
[string appendFormat:@"\t%@", key];
[string appendString:@" : "];
[string appendFormat:@"%@,\n", obj];
}];

// 结尾有个}
[string appendString:@"}"];

// 查找最后一个逗号
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound)
[string deleteCharactersInRange:range];

return string;
}
@end

@implementation NSArray (Log)

- (NSString *)descriptionWithLocale:(id)locale
{
NSMutableString *string = [NSMutableString string];

// 开头有个[
[string appendString:@"[\n"];

// 遍历所有的元素
[self enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
[string appendFormat:@"\t%@,\n", obj];
}];

// 结尾有个]
[string appendString:@"]"];

// 查找最后一个逗号
NSRange range = [string rangeOfString:@"," options:NSBackwardsSearch];
if (range.location != NSNotFound)
[string deleteCharactersInRange:range];

return string;
}

@end
阅读全文 »

  匆匆一周过去,回想起来,值得一提的也没有什么,有些做一天和尚撞一天钟的碌碌,但平静心情总结一下,虽然碌碌倒也不是无为。
  先聊聊天气,本周阴天占比较多,可能是到了月末月初交接,股市大盘这几日也不断波动,阴晴不定。心情也时好时坏,说话的欲望被沉默吞并,鞋子在几场大雨里被反复浸成船,某天晚上下班,看见飞机穿过乌云,开着大灯,像吸尘器把乌云吸走,留下一块一块白色的光道,看起来就像 UFO 飞过。想起星空、宇宙和不明飞行物,心情似乎就好了一点。
  上周工作量增多初见端倪,本周的端倪又多了一些,部门的项目慢慢多了起来,虽然总结工作内容也就是为了需求搭建功能和解决 bug,但量一多了,难免有些焦头烂额。想打个鸡蛋在额头上做荷包蛋——哈。
  我有没有说过有时候想到一些东西,但最后总是发现别人早就已经有现成的理论学说在很早就已经出来了。如果没有,那我再说一遍,有时候我心血来潮想到一些我自以为特别的想法,比如成功学是用来淘汰社会上平庸但又野心勃勃的年轻人的。然后一翻书——忘记谁谁谁了,就说过差不多的话。除此以外,最近还发现,总是在一件事发生很久以后才想起来最好的应对方式——包括话语,态度,行为之类的应对。不过想想这可能是人类的通病,也可能是人们产生后悔的根源。也就释怀了一点点了。        

  小时候在酒桌上喝酒,总在大人们的撺掇向一些长辈敬酒,熟面孔多的时候也会童言无忌说上几句叔叔伯伯生意兴隆万事大吉,但生面孔多的时候心里也会有点害羞的不情愿,到了后来念书走上社会,面对学校老师职场前辈,起初也会有一些真心实意的感谢祝酒词。但是后来觥筹交错多了,渐渐习惯了这种场面,说不走心的祝福,妥协于气氛,绞尽脑汁,生编硬造一些词来祝酒,偶尔心里也会回忆起小时候被长辈逼迫下情不由衷的别扭。但时间长了,这种感觉也慢慢淡了。

阅读全文 »

  上周六因为一个项目的迭代,所以写周记的时间就被冲到这个礼拜周一写了。其实项目本身更新的功能很容易解决,但是更多的时间是在解决之前开发人员所产生的 bug,解决 bug 的过程比较麻烦和消耗时间,但是当一个 bug 解决以后,往往能获得一点新的知识。比如通过侧滑手势的增加,在手势结束后时间 layerAnimation 的缩放动画,可以让整个侧滑过程看上去更生动。还有手势操作在继承关系中的响应问题,其他的问题不太具有普遍性,只会在单个项目中出现,所以略过不提。
  周二的时候换了办公场所,是之前提到的兄弟公司,据说之后我们部门也可能整体搬迁过来,只不过现在算是临时支援。兄弟公司,离住的地方近了一些,人也多了一下,周围的环境也比较悠闲,早上傍晚都有老头老太或者妈妈带小朋友在遛弯,虽然他们在遛弯的时候,我在上班,但我觉得他们背着手优哉游哉的样子,在一定程度上缓解了我紧绷的情绪。
  周六和同事去游泳,算上这次,是我第二次正经去泳池学习游泳了,进度不谦虚的讲,可以说是一日千里。第一次下水,克服了在水里的恐惧,可以在泳池中直立起来,第二次下水,虽然还不会换气,但是已经可以一口气用蛙泳的姿势游十来米了。按照这个速度,再来几次,不日将可以参加国家队~哈哈。
  继续看陈丹青的《笑谈大先生》,看陈从鲁迅的朋友,鲁迅的死亡各个角度写,写的很好,我没什么想说的。
  一个礼拜都没怎么学习,没怎么画画,周末去图书馆看了两章数据库的内容,觉得很充实,我想我已经从上个礼拜的懈怠情绪出来了。下个礼拜希望可以表现得更好。   

  Xcode 升级到 8.x 以上版本后为了提升安全性, 防止 XcodeGhost 事件的发生, 添加了代码签名机制, 所以以往我们那些用的很顺手的 Xcode 插件一下子统统都被打入冷宫。这种情况下,我们想要重新使用插件,我们应该怎么做呢?
  首先我们要使用插件第一步是给 Xcode 重新签名, 在签名前建议备份一个纯净 Xcode 做 App 打包发布用(应用程序目录下复制一个即可)。

一、Xcode 重签名以使用插件

阅读全文 »

  周记这个 flag 立了已有三个月了,体验一般,虽然每个礼拜确实有回顾和反思,但实际起到的作用大概还是走马观花多一些,而且营养也不是很大,不过孰好孰坏现在也说不清,就像之前写了几年的日记,后来骤然放下,对我的影响也微乎其微。但当时留下来的日记在时间过去许久以后的现在发挥的作用其实远大于在当时所发挥的作用。所以我想周记在我还没颓废还可以写的时候,能写一些就写一些吧。
  上周有一点点懈怠,预计好的学习计划都 GG 了,整理了一下所有课程还没看到部分总共还有三百多页,上个礼拜本来想至少也要看完三分之一的,但发现注意力很容易被分散,周末上课也是,老师讲着讲着,忽然我就想到其他事情去,然后思绪转回来想我不应该这样,有没有什么软件可以帮人集中注意力,记得有一个叫 forest,然后就拿出手机搜索,一点一点开起小差来。我想大概是学习步入正轨已经很长一段时间了,刚开始的热情有点消退,学习又是一个很难在短期内能收到回馈的一件苦差,所以难免心生懈怠。想到这,不由恨从心起,学习真是个王八蛋。不过即使这样他再王八蛋,也是个可以提升我的好王八蛋。所以下个礼拜目标继续把教材啃完。
  本周看了一部电影《摇摆狂潮》,恶,很烂不讲。周三的时候忽然心血来潮看起了陈丹青的《笑谈大先生:七讲鲁迅》,还不错,如果看做是一本鲁迅研究的书,切入点很别树一格,然后发现陈丹青的叙事语气和木心的叙事语气很像,不过对一点不意外因为之前知道他们的师徒关系,但看到更多的是,陈丹青好像真的很推崇他的老师。
  工作上的事本周都比较平,都是一些难度不是很高的任务,还有一些要和人沟通推进的事,但对我来说也不在话下,之前可能会因为对方不配合或敷衍的态度可能会心里不通畅,但现在已经好多了,大都以公事公办的态度切入对话。不过也在心里叹一口气,诶,我也慢慢变成了一个不动声色的大人了。否则按照归来仍是少年的逻辑,这会我应该跨马横刀,头昂昂气扬扬送他一句去你妈的。
  公司给我提薪的事总要有了阶段性的结果,不过具体还要下个礼拜确定,过程有些一波三折,甚至让我觉得是不是某种形式的敲打,甚至不抱很大希望了,不过就当好事多磨吧,中间琐碎就跳过不讲好了。   

  每次有一些模棱两可想法的时候,都会在互联网上看到别人已经成体系的理论。这让我觉得虽然沙雕网友遍地走,睿智网友也不少。
  本周依旧,忙碌的部分集中在头部,后半段的时候主要的都是一些琐碎的事,不过周四的时候针对当前项目的一个 bug,重写了部分逻辑。让我对加载 h5 页面的控件多了一些认识,还有手势响应链的理解,比如当前页面如果同时有侧滑返回手势和页面右滑手势时,两者在响应的优先级上,侧滑手势作为更底层的方法会先响应,当返回 false 时,页面右滑手势才会开始响应。虽然是个小知识点,但对于我理解系统继承类和系统代理实现有了更直观的认识,虽然一直有系统的类,和我们自己生成的类其实没什么差别的概念,只不过系统是封装起来,然后有很多父类方法,可以用在某些场景中解决问题。但是开发的时候有时也会有盲点,对于一些顽固,或者需要捆绑修改才能生效的地方总有黔驴技穷的心塞。
  极客时间停在了项目开发的任务划分,也似乎因为停留太久,每次从头看都很难有一鼓作气看完的气力,也许也和我的拖延症有一些关系,因为画画认识一个网友,约好说互相鼓励,学习画画。最近几个礼拜互相交流进度,他佩服我自制力强,作息规律。但如人饮水,冷暖自知,我自制力强吗?不强,刚出新手村吧。这个礼拜线条练了两天,新的手绘课程算正式开始了,第一节课老师教人物描形,画草图,看着简单,但实际联系的时候也有些问题,用四边形概括人物轮廓,问题不到,但是画草图时,虽然老师也说不用太在意画的想不想,只要大致样子就行,但是在我刻意的临摹人物五官,想复原神态的时候总是画虎不成反类犬,而且画完总觉得整体看上去不够大气。
  抽空看了一下最近很火的《长安十二时辰》,有马伯庸老师作品改编垫底,加上制作讲究,人物也都智商在线,确实不错。不过就是优酷的广告太过恶劣,每次看都要先看两分钟广告,中间还要穿插剧中人物的广告,而且发现现在网贷和网络理财的广告出现频率很高,想着一边是二十多岁花龄少女欠下巨额网贷无法偿还自杀身亡额新网,另一边这种网贷公司仍然没有管制的野蛮生长,越演越烈。不过除了心里嗤笑,也于事无补。还看了一部电影《恶人传》,警匪合作缉拿连环凶手的创意不错,但原本预期以为看《恶人传》的名字,以为故事里有价值观的分歧是会产生在黑帮老大和连环杀手身上,一种是因其为实现目的而表现成恶,另一种纯粹的恶,觉得应该会很有看头,所以剧情后面的发展虽然好看但是心里觉得有点不尽人意。而且连环凶手除了家庭合照在他的住处一闪而逝以外——也只是为了推进剧情确认身份,觉得他这个人物不是很饱满,甚至作为一个变态杀手,都有些脸谱化,被抓被打被判罪,都保持一种邪恶的狞笑,符合人们对变态杀手的直观印象,但没有跳出来。就像一个从其他地方摘录过来的人物剪贴。
  周末照旧去上了课,信息资源管理已经上完了,然后发现有一门课,因为周六上午都没上课的原因,我自己才看了十几页书,嗯,下周要把重心放在学习上了。

  忽然觉得当咸鱼既容易又困难,只要找到某种自洽,并能说服自己。和朋友聊天问近况,他说頽了,放弃了。原因是看见未来无望,贫富阶级固定,咸鱼再难翻身。我想起另外一个朋友当咸鱼的理由是得过且过,活在当下,当前的快乐最重要。他们立足于现在和未来都给自己当咸鱼找到了理论支撑,这样没有心理压力的做咸鱼是容易的,但这些理由一点也都说服不了我,而在尝试做咸鱼失败之后我甚至可以立马找到理由开导自己,不一定每个人都有天赋做咸鱼,找到适合自己的方式生活就好。
  所以事情陷入僵局,但回到起点看,问题倒不是要不要做咸鱼,又或者是怎么才能做咸鱼的问题。而是如何心无旁骛的在自己选择的路上走,不再三心二意的左右顾盼,不再对自己没得到的东西报有念念不忘的遗憾。之前在微博上看到一句,大概意思是人要是没有回忆,就可以像一台完美的机器一样一直合理运作。总是在空闲的时候,在脑子里猝尔闪烁,仔细想想,或许可以。但如果真是那样,彼时的我可能也不会有此时这种想法。
  新开了一本书《迁徙的间隙》,作者只比我大一岁,文字很有灵气,对事物的描写所选择切入的视角也很有意思,前卫,故事的内核有点晦涩,有些地方也有一些流于雕琢的痕迹,但即便这样,也让我很羡慕,书里的那种文字,是我一直在尝试但却一直没写出来的东西。不过我也不是很气馁,因为想写的东西还有很多很多,作者也让我看到了一个可能性,就是坚持写,不断耕耘,总会有开花结果的一天。
  素描课已经学到三棱体的画法了,透视打调子越来越熟练,但是图形线条好像越画越不直了,所以接下来的重心是回过头继续练基本功。英语单词的第一轮复习大概这周末可以结束,极客时间上的课有些懈怠,本周只看了一两节,中午本来预计拿来刷题的时间也被我用来看小说,所以下周要加油了~
  工作上重头内容都在星期一一口气解决了,其他几天做的事除了修改 bug,都是一些重复性很强的事,所以本周比较清闲,值得记录的是,我用 UITextField 写登录界面的输入框,设置 right view 分别是下拉的箭头和隐藏显示密码的按钮,有个问题就是他们的位置都显示在 textfield 的边缘,显得很怪异。然后我试了 UITextField 的拓展,试把 right view 的 UIButton 改用 UIiamgeview,试了改变 left view,content view,right view 的边距来改变 right view 的位置,都没有起作用。最后起作用的是,改变 right view 的大小,使设置 right view 的 button 内部图片居中,起到位置移动的效果。
  另外一个问题是用 swiftScan 现成的轮子生成二维码图片,用他自带的方法在中心位置添加 logo,会导致 logo 图片模糊,然后我就手动修改了添加 logo 的方法,解决。