关于UIScrollView有些你很难知晓的崩溃情形

简介:

关于UIScrollView有些你很难知晓的崩溃情形

为了实现以下的功能(按钮之间的切换效果):

简短的代码如下:

//
//  RootViewController.m
//  BUG
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"

@interface RootViewController ()

{
    UIView    *_showView;
}

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    _showView = [[UIView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:_showView];
    
    NSArray *title = @[@"YouXianMing",
                       @"XianHui",
                       @"XianMing",
                       @"XianNeng",
                       @"XianRen"];
    
    [title enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        // 初始化button
        UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(50, 50*(idx + 1), 130, 30)];
        button.layer.borderWidth = 1.f;
        [_showView addSubview:button];
        
        // 设置字体
        button.titleLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin"
                                                 size:15.f];
        
        // 设置标题以及标题颜色
        [button setTitle:obj
                forState:UIControlStateNormal];
        [button setTitleColor:[UIColor redColor]
                     forState:UIControlStateNormal];
        
        // 添加事件
        [button addTarget:self
                   action:@selector(buttonsEvent:)
         forControlEvents:UIControlEventTouchUpInside];
    }];
}

- (void)buttonsEvent:(UIButton *)button
{
    [_showView.subviews enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
        UIButton *tmpButton = obj;
        
        if ([tmpButton isEqual:button])
        {
            [tmpButton setTitleColor:[UIColor redColor]
                            forState:UIControlStateNormal];
        }
        else
        {
            [tmpButton setTitleColor:[UIColor blackColor]
                            forState:UIControlStateNormal];
        }
    }];
}

@end

之后,将UIView替换成UIScrollView后:

然后就会崩溃-_-!!

崩溃信息:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIImageView setTitleColor:forState:]: unrecognized selector sent to instance 0xa590390'

崩溃原因是_showView.subviews里面有一个UIImageView

我们并没有添加这个东西UIImageView到subviews中呢,其实,这个东西是UIScrollView自己的一个东西......

写上以下保护性语句就没问题了.

话说,UIScrollView跟你偷偷加了点东西让你崩溃了都不知道咋回事-_-!!!

目录
相关文章
|
1月前
|
Android开发
Android事件冲突原理及解决方法
Android事件冲突原理及解决方法
19 0
|
4月前
|
JavaScript IDE Java
bugly崩溃排查3:观察是谁调用了崩溃函数
bugly崩溃排查3:观察是谁调用了崩溃函数
23 0
|
10月前
|
Java 编译器 应用服务中间件
几行代码就可以把系统高崩溃;
几行代码就可以把系统高崩溃;
70 0
|
12月前
|
JSON NoSQL Redis
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
逆转时间,起死回生——程序报错崩溃后,如何倒回到崩溃的位置?
72 0
|
SQL 运维 监控
一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG
一个诡异的MySQL查询超时问题,居然隐藏着存在了两年的BUG
166 0
|
存储 自然语言处理 Dubbo
几行代码轻松实现跨系统传递 traceId,再也不用担心对不上日志了!
新项目查日志太麻烦,多台机器之间查来查去,还不知道是不是同一个请求的。打印日志时使用 MDC 在日志上添加一个 traceId,那这个 traceId 如何跨系统传递呢?
1036 0
|
架构师 Java Spring
追逐影子的人,最终只会是影子
追逐影子的人,最终只会是影子
116 0
追逐影子的人,最终只会是影子
|
监控 Java 数据库
一个线程罢工的诡异事件
线上某个应用里业务逻辑没有执行,导致的结果是数据库里的某些数据没有更新。
|
存储 SQL Web App开发
你们的系统真的安全吗?你们系统是不是也有这种诡异的情况呢?
这个文章来源灵感是公司的项目在安全检查的时候,发现了很多 SQL 注入的一些问题还有一些 XSS 攻击问题,SQL 注入我们都是比较了解的,那么什么是 XSS 攻击呢?测试反馈给我的时候我是一脸懵逼呀,现在我们就来说一下什么是 XSS 攻击,以及我们怎么防止它的出现。