一句话笔记,某段时间内遇到或看到的某个可记录的点。
- 某个取不到值的吐槽,原来是后台啊
- 取 url 参数的特殊格式,进行优化
- NSNULL 和 nil 的区别
- removeFromSuperview 调用 didMoveToSuperview
一、一直取不到值, 用的是 YYModel, 一串返回参数中都可以取到值,就那个不能取到
{
"goodsSn": "121",
"webGoodSn ": "13",
"wareCode": "14",
}
{
"goodsSn": "121",
"webGoodSn": "13",
"wareCode": "14",
}
一直取不到 webGoodSn 的值,第一天真的很懵逼,后来才看到原来是后面多了一个空格,合理质疑后台是十分必要的,😫😫😫😫😫😫😫😫
二、 取 url 参数的特殊格式,进行优化
通常我们取 URL 的参数直接采用 NSURLComponents 的系统方法就妥妥的啦
[components.queryItems enumerateObjectsUsingBlock:^(NSURLQueryItem *item, NSUInteger idx, BOOL * _Nonnull stop) {
if (item.value && item.name) {
dict[item.name] = item.value;
}
}];
但是有时会有一些特殊情况,会有空格啦,或者你想不到的不合法 URL 啦
- 转换空格
- 去掉换行和首尾空格
- 对特殊的链接进行处理下
+ (NSDictionary *)parameterWithUrlString:(NSString *)link deepLink:(NSString *)deepLink {
deepLink = [NSString stringWithFormat:@"%@", deepLink];
NSRange range = [link rangeOfString:deepLink];
if (range.location == NSNotFound) {
return nil;
}
NSString *parameter = [link substringFromIndex:range.location + range.length];
parameter = [parameter stringByReplacingOccurrencesOfString:@"?" withString:@""];
if (parameter.length == 0) {
return nil;
}
NSMutableDictionary *dict = [NSMutableDictionary dictionary];
// 1、转换空格
link = [link stringByReplacingOccurrencesOfString:@" " withString:@"%20"];
// 2、去掉换行和首尾空格
link = [link stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
NSURLComponents *components = [NSURLComponents componentsWithString:link];
// 3、对 URL 是不是合法
if (components) {
/* 普通的连接 */
[components.queryItems enumerateObjectsUsingBlock:^(NSURLQueryItem *item, NSUInteger idx, BOOL * _Nonnull stop) {
if (item.value && item.name) {
dict[item.name] = item.value;
}
}];
} else {
/* 对特殊的链接进行处理下 */
NSArray *parameterList = [parameter componentsSeparatedByString:@"&"];
[parameterList enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL *_Nonnull stop) {
NSArray *subParameterList = [obj componentsSeparatedByString:@"="];
if (subParameterList.count == 2) {
dict[subParameterList.firstObject] = subParameterList.lastObject;
}
}];
}
return dict.copy;
}
对 URL 是不是合法一定要注意,因为空格啊 汉语啊,七里八里的容易出错的。
空三、NSNULL 和 nil 的区别
对于有些地方需要特殊的进行 [NSNull class] 的处理
if ([message isKindOfClass:[NSNull class]]) {
}
PS 参考: http://nshipster.cn/nil/
四、removeFromSuperview 调用 didMoveToSuperview
在 10.2 系统中我们发现了一个因为 removeFromSuperview 调用 didMoveToSuperview 产生的崩溃问题, 其实 didMoveToSuperview 平时我们用的少的,但是由于 MBProgressHUD 和 YYAnimatedImageView 都有用到,一些类里面我们也不知不觉的用到了。
- (void)didMoveToSuperview {
// 此处先判断下,该 Superview 是否还存在否
}
当然平时我其实真的不怎么用到这个方法咯,可以注意下
网友评论