ios 项目中遇见的问题_vue项目在ios下常见bug - CSDN
  • 项目的过程, 我们放入@2x、@3x的图片, 但不放入4.7寸与5.5寸屏幕尺寸的启动页时, 在4.7与5.5寸屏幕下展示,对app的整体显示效果都有很大的影响。  1).在不放入4.7与5.5启动页时, 运行程序, 虽然放入了@...

    1.不放4.7、5.5的启动页,导致的程序整体效果不佳

    做项目的过程中, 我们放入@2x、@3x的图片, 但不放入4.7寸与5.5寸屏幕尺寸的启动页时, 在4.7与5.5寸屏幕下展示,对app的整体显示效果都有很大的影响。


      1).在不放入4.7与5.5启动页时, 运行程序, 虽然放入了@3x的图片, 但是程序使用资源只会显示@2x的效果, 则会造成图片的拉伸与显示模糊等。


      2).整体比例按照@2x状态下显示, 造成布局位置偏移  


     3).显示字体与UI所给像素不一致 , 正常情况下:字体大小 = 像素 / 2, 不放入相应启动页, 字体会整体偏大



    2.将创建好的VC放进数组, 每次进入带有输入框的页面时,输入框中,第一次输入正常后, 收起键盘或者返回上一页, 再次进入,弹起键盘时,导致输入的字符向上跳动至无法看见,并在模拟器及真机上报错Can't find keyplane that supports type 4(5,6等) for keyboard的问题


    解决方法: 进入带有输入框的页面之前, 将放入VC的数组重新初始化并加入VC到该数组




    3.Xcode has encountered an unexpected error (0xC01C) 问题


    解决方法:  重启Xcode, 拔线重插,clean之后运行  



    与上面相似的问题的解决方法

    Xcode has encountered an unexpected error (0xC002)

    No such file or directory, at ‘/SourceCache/DTDeviceKit/DTDeviceKit-867/DTDeviceKit/DTDeviceKit_Utilities.m:863’


    1).退出Xcode


    2),打开Terminal,从terminal里进入~/Library/Developer/Xcode/iOS\ DeviceSupport/5.1.1\ \(9B206\)/Symbols/System/Library/Caches/com.apple.dyld/这个目录(5.1.1\ \(9B206\)为设备系统版本信息)


    3),用touch命令创建以下6个文件


    touch .copied_dyld_shared_cache_armv6

    touch .processed_dyld_shared_cache_armv6

    touch dyld_shared_cache_armv6

    touch .copied_dyld_shared_cache_armv7

    touch .processed_dyld_shared_cache_armv7

    touch dyld_shared_cache_armv7


    当然你也可以在Finder里面创建这些文件,但是我觉得用Terminal更快、



    4),重启Xcode,应该就可以在Organizer里看到设备正常了




    展开全文
  • iOS 开发你是否遇到这些经验问题   前言 小伙伴们在开发难免会遇到问题, 你是如何解决问题的?不妨也分享给大家!如果此文章其中的任何一条问题对大家有帮助,那么它的存在是有意义的! 反正不管...

    iOS 开发中你是否遇到这些经验问题

     

    前言

    小伙伴们在开发中难免会遇到问题, 你是如何解决问题的?不妨也分享给大家!如果此文章其中的任何一条问题对大家有帮助,那么它的存在是有意义的! 反正不管怎样遇到问题就要去解决问题, 在解决问题的同时也是提高开发经验的渠道!

    1.既然有问题我们该怎样解决 ?

    首先大部分人都会去百度搜索来解决问题, 谁都不例外, 可是百度这东西会有很多误解, 甚至误人子弟, 同时解决问题的效率也不是很高, 如果是技术问题可以去:

    • Google 简单来说比百度搜索的答案相对要多,要更准确效率更高, 建议使用英文搜索
    • Stack Overflow 一个与程序相关的IT技术问答网站, 简单来说工作中的70%问题在这里都能解决

    搜索是解决问题的一种办法, 那么剩余30%的问题还是需要自己独立去解决, 那么有人会问有没有能提高独立解决问题的办法呢 ? 比如: 积累所遇到的崩溃信息, 学会查看崩溃信息, 查看官方文档的技巧等等) 本文暂时不会详解, 有时间的话需要单独写一篇文章来探究如何高效的解决崩溃问题!

    2.用断点调试崩溃问题的小技巧
    • (1)如果当前断点指向内存, 那么就是初始化时分配内存时有问题
    • (2)添加全局断点的问题:

      添加全局断点.png

      全局断点的目的就是当产生异常崩溃能够停留在异常或者崩溃发生的地方而不是跳转到主函数

    崩溃断点.png


    但是添加全局断点后会跳转到主函数, 会遇到如上图的情况, 那么80%的问题就是storyboard或者xib拖线没有及时清理掉坏线如下图:


    拖线没有清除.png


    这条Button的连线在代码中已经删除了不用了, 但是没有及时清理掉,所以会造成崩溃!

    3.NSString使用stringWithFormat拼接的相关知识
    • 保留2位小数点
      //.2代表小数点后面保留2位(2代表保留的数量)
      NSString *string = [NSString stringWithFormat:@"%.2f",M_PI];
      //输出结果是: 3.14
      NSLog(@"%@", string);
    • 0补全的方法
      NSInteger count = 5;
      //02代表:如果count不足2位 用0在最前面补全(2代表总输出的个数)
      NSString *string = [NSString stringWithFormat:@"%02zd",count];
      //输出结果是: 05
      NSLog(@"%@", string);
    • 字符串中有特殊符号%怎么办
      NSInteger count = 50;
      //%是一个特殊符号 如果在NSString中用到%需要如下写法
      NSString *string = [NSString stringWithFormat:@"%zd%%",count];
      //输出结果是: 50%
      NSLog(@"%@", string);
    • 字符串中有特殊符号"怎么办
      NSInteger count = 50;
      //"是一个特殊符号, 如果在NSString中用到"需要用\进行转义
      NSString *string = [NSString stringWithFormat:@"%zd\"",count];
      //输出结果是: 50"
      NSLog(@"%@", string);
    4.判断是否为gif/png图片的正确姿势

    首先我们先想想如果是你, 你会怎么去判断一个从网络获取的图片URL是否为gif图片, 是否是这样呢 ? 如下:

       //假设这是一个网络获取的URL
       NSString *path = @"http://pic3.nipic.com/20090709/2893198_075124038_2.gif";
       // 判断是否为gif
       NSString *extensionName = path.pathExtension;
        if ([extensionName.lowercaseString isEqualToString:@"gif"]) {
            //是gif图片
        } else {
            //不是gif图片
        }

    什么难道你不是这么判断的么 ? 哦~ 我懂了, 难道你使用字符串截取来判断的吗 ? 哈哈开个玩笑!
    以上判断看似是可以的,但是这不严谨的, 在不知道图片扩展名的情况下, 如何知道图片的真实类型 ? 其实就是取出图片数据的第一个字节, 就可以判断出图片的真实类型那该怎么做呢如下:

    //通过图片Data数据第一个字节 来获取图片扩展名
    - (NSString *)contentTypeForImageData:(NSData *)data {
        uint8_t c;
        [data getBytes:&c length:1];
        switch (c) {
            case 0xFF:
                return @"jpeg";
            case 0x89:
                return @"png";     
            case 0x47:
                return @"gif";        
            case 0x49:   
            case 0x4D:
                return @"tiff";        
            case 0x52:  
                if ([data length] < 12) {
                    return nil;
                }
                NSString *testString = [[NSString alloc] initWithData:[data subdataWithRange:NSMakeRange(0, 12)] encoding:NSASCIIStringEncoding];
                if ([testString hasPrefix:@"RIFF"] && [testString hasSuffix:@"WEBP"]) {
                    return @"webp";
                }
                return nil;
        }
        return nil;
    }

    其实图片数据的第一个字节是固定的,一种类型的图片第一个字节就是它的标识, 我们来调用一下这个方法:

     //假设这是一个网络获取的URL
        NSString *path = @"http://pic.rpgsky.net/images/2016/07/26/3508cde5f0d29243c7d2ecbd6b9a30f1.png";
        NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:path]];
        //调用获取图片扩展名
        NSString *string = [self contentTypeForImageData:data];
        //输出结果为 png
        NSLog(@"%@",string);
    5.Button禁止触摸事件的2种方式

    大家应该知道, 有很多需求是在规定内不允许点击Button, 并且让用户知道这个按钮是不可以点击的,那我们应该这样设置:

    //会改变按钮的状态,颜色会变灰
    button.enabled = NO;

    但是又有一个需求是既不能点击也不要改变Button颜色:

    //保持按钮原来的状态,颜色不会变
    button.userInteractionEnabled = NO;
    6.跟xib一起走过的坑

    (1) 如果在xib中有一个控件, 已经明确设置尺寸了,输出的frame也是对的, 但是显示出来的效果不一样(比如尺寸变大了), 如果是这种情况一般就是autoresizingMask自动伸缩属性在搞鬼! 解决办法如下:

    //xib的awakeFromNib方法中设置UIViewAutoresizingNone进行清空
      - (void)awakeFromNib {
        self.autoresizingMask = UIViewAutoresizingNone;
    }

    (2)如果你的控制器的view是用xib创建的, 当你拿到view的尺寸是不准确的, 在这里我们就需要通过[UIScreen mainScreen].bounds拿到尺寸, 但是storyboard的尺寸是准确的!

    7.你是用什么方法设置图片圆角?

    首先你是否是这么设置的:

        //cornerRadius 设置为self.iconImage图片宽度的一半(圆形图片)
        self.iconImage.layer.cornerRadius = 20;
        self.iconImage.layer.masksToBounds = YES;

    或者是在xib&storyboard中点击要设置圆角的图片:


    xib或者storyboard设置圆角.png

    在此之后建议大家尽量不要这么设置, 因为使用图层过量会有卡顿现象, 特别是弄圆角或者阴影会很卡, 如果设置图片圆角我们一般用绘图来做:

    /** 设置圆形图片(放到分类中使用) */
    - (UIImage *)cutCircleImage {
        UIGraphicsBeginImageContextWithOptions(self.size, NO, 0.0);
        // 获取上下文
        CGContextRef ctr = UIGraphicsGetCurrentContext();
        // 设置圆形
        CGRect rect = CGRectMake(0, 0, self.size.width, self.size.height);
        CGContextAddEllipseInRect(ctr, rect);
        // 裁剪
        CGContextClip(ctr);
        // 将图片画上去
        [self drawInRect:rect];
        UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        return image;
    }

    这个方法就是设置圆角图片, 效率很高, 不会造成卡顿现象, 大家要把这个方法单独放到分类中使用

    8. ## 与 @# 在宏里面该怎样使用
    • ##的使用, 首先我们添加一个宏

      #define LRWeakSelf(type)  __weak typeof(type) weak##type = type;

      ##是连接的作用, 即当使用上面的宏会把weak与输入的type值连接起来如下图:


      ## 的使用.png
    • #的意思是紧跟着它的后面的标识符添加一个双引号""

    • @#的使用, 我们添加一个普通的宏:
      //随便写一个宏
      #define LRToast(str) [NSString stringWithFormat:@"%@",str]
      //这个宏需要这样写
      LRToast(@"温馨提示");
      NSLog(@"%@",LRToast(@"温馨提示"));
      强调下我只是随便定义一个宏来做示例, 以上代码是正常的使用,我们在来看看添加@#是怎么使用的:
      //随便写一个宏
        #define LRToast(str) [NSString stringWithFormat:@"%@",@#str]
        //这个宏需要这样写
        LRToast(温馨提示);
        //正常运行, 打印不会报错
        NSLog(@"%@",LRToast(温馨提示));
      我们可以看出来 LRToast(温馨提示);LRToast(@"温馨提示");区别, 也就是说@#可以代替@"" 那么我们以后开发就省事了, 不用再添加@""了!
    9.自动布局Autolayout口诀

    storyboard或者xib使用自动布局, 如果控件比较多而且布局复杂, 一不小心就会报一大堆错误警告, 那么这个口诀是必备良药, 跟着这个口诀走再也不用害怕Autolayout恐惧症了 !


    Autolayout.png


    按照如上图从上到下顺序读就是当前这条约束的状态
    First Item(登录按钮的顶部)Relation(等于) Second Item(父类View的顶部) Constant(加上 10)  Multiplier(乘以 1)

    10.App迭代开发版本号的规则

    在iOS中简单的版本号是怎样管理的呢? 首先我们的App第一版本首次上线, 比如以1.0.0为首次上线的版本号:

    1.上线后突然发现一个严重的Bug那我们就要修复更新版本, 此时我们的版本号为1.0.1
    所以说如果修复Bug或者优化功能, 我们只修改叠加第三位数字, 其他不变

    2.如果有了新的需求, 在原来的基础上增加了一个新功能, 那么我们的版本号变为1.1.0, 需要清空第三位数字为0, 来叠加修改第二位数字

    3.如果App需求功能大改, 更新量非常大, 那我们的版本号变为2.0.0, 需要叠加修改第一位数字, 清空其他数字为0

    展开全文
  • iOS】GitHub上最受欢迎...GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已经被弃用,即使曾经的它很受开发者喜爱,有的项目则继续发扬光大,新项目


     

    “每一次的改变总意味着新的开始。”这句话用在iOS上可谓是再合适不过的了。GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已经被弃用,即使曾经的它很受开发者喜爱,有的项目则继续发扬光大,新项目更是层出不穷。在本文中,我们将继续为大家介绍20个在GitHub上非常受开发者欢迎的iOS开源项目,在这些项目中,有哪些是你经常使用的?又有哪些是你曾经使用过的?

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    21. SSToolkit

    SSToolkit可以说是iOS开发者最常使用的工具类之一,该开源项目提供了一个完整的iOS类库集合,用于解决iOS开发者在开发过程中常碰到的一些问题,比如追踪一款设备是否具有视网膜显示屏或是否能剪裁图片,包含SSCollectionView、SSGradientView、SSSwitch等诸多非常方便的类。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    如果想要对SSToolkit作进一步了解,可以在iPad/iPhone上使用SSToolkit的Demo应用SSCatalog。获取更多信息,可直接登陆S.S. TOOLKIT

    22. XMPPFramework

    XMPPFramework是一个使用Objective-C编写的用于Mac/iOS开发的XMPP框架,它提供了一个RFC-3920(XMPP标准)核心实现,通过某些特定工具读写XML。XMPPFramework有着非常丰富的建立在模块化架构之上的XEP扩展,开发者可以将其直接插入到代码中,使用GCD构成,即使是在非常老旧的iPhone或12核Mac Pro上,它都能高效运转。

    23. MGSplitViewController

    为了方面开发,苹果iOS SDK提供了UISplitViewController用于iPad左右分栏界面显示,但对于开发者而言,UISplitViewController使用起来并不方便,在开发过程中,总会遇到许多问题。于是,天才的iOS开发者Matt Gemmell在GitHub上发起了一个名为MGSplitViewController的开源UISplitView实现,它比苹果官方UI组件所提供的分栏类功能更加丰富。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    最初Matt编写MGSplitViewController只是为了方便自己使用,但最终Matt决定将其开源,供所有iOS开发者使用。如果想要了解更多关于MGSplitViewController的信息,可直接登陆Matt Gemmell博客查看,也可点击链接,查看视频演示(需)。

    24. CocoaLumberjack

    CocoaLumberjack集快、简单、强大、灵活于一身,和log4j等其他非常受开发者欢迎的日志框架的概念类似,专为Objective-C设计,用于iOS和Mac,拥有多线程、GCD(如果可用)、无锁原子操作和Objective-C运行时的动态特性。

    25. PSTCollectionView

    PSTCollectionView是用于iOS 4.3及其以上版本中的UICollectionView的100%开源API兼容替代品。如果想要使用UICollectionView,但仍然需要支持老版本的iOS,那么这个项目你一定会非常喜欢。如果想要始终使用PSTCollectionView,使用PSTCollectionView作为类名称即可。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    当然,如果你想在iOS 4.3/5.x上使用PSTCollectionView,但在iOS 6上使用UICollectionView,可以在所有UICollectionView类上添加PS,以获得对老版iOS的自动支持,这样就可以随心所欲如你所愿地使用PSUICollectionView。

    26. CocoaHTTPServer

    CocoaHTTPServer是一个用于Mac OS X或iOS应用的轻量级、可嵌入的HTTP服务器框架。有时候开发者需要在他们的App中内嵌一个HTTP服务器。无论是具有远程监控功能的服务器应用,还是使用HTTP进行后端通信的桌面应用,或者是提供无线访问文档功能的iOS应用,CocoaHTTPServer都能满足你的开发要求。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    CocoaHTTPServer提供如下功能:

     

    • 支持Bonjour广播内建;
    • 支持IPv4、IPv6;
    • 异步网络使用GCD和标准套接口;
    • 密码保护支持;
    • SSL/TLS加密支持;
    • 快速、高效;
    • 伸缩性强;
    • 大量注释代码;
    • 非常容易扩展;
    • 还支持WebDAV。

     

    27. PushSharp

    在应用开发中,给App推送通知是很常见的方式。PushSharp正是这样一个能够实现向iOS(iPhone/iPad APNS)、Android(C2DM和GCM)、Windows Phone、Windows 8、BlackBerry(PAP)和Amazon(ADM)等多种操作系统推送消息通知的开源C#服务器端库。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    主要特性:

     

    • 支持多平台消息推送;
    • API能够很流畅地为不同平台创建通知;
    • 自适应信息频道(自动增加或减少消息链接);
    • 使用异步代码,基于Event为导向调用类库;
    • 100%代码托管,兼容Mono框架;

     

    28. HockeyKit

    此前在GitHub上“最受欢迎的Android开源项目”系列文章(一)中,我们曾对HockeyKit进行了详细的介绍。HockeyKit是一个用于iOS和Android下App更新的开发包,无论是iOS还是Android应用开发,它都深受开发者喜爱。

    29. JTRevealSidebarDemo

    JTRevealSidebarDemo是一个能够实现类似于Facebook客户端和Path应用的视图切换效果的Objective-C库模板,其目的在于为开发者提供一个真正灵活的、可重用的解决方案。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    JTRevealSidebarDemo可用于iOS 4.3和5.0应用开发,示例代码使用ARC构建,但该库本身则兼容ARC和非ARC。

    30. PKRevealController

    PKRevealController是对ZUUIRevealController的进化,ZUUIRevealController能够实现类似于Facebook客户端的视图横向切换效果。而PKRevealController则是一个iOS视图控制器的集合,能够让你实现多重控制器切换,非常灵活。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    31. QuincyKit

    QuincyKit是一个为iOS和Mac OS X提供的程序崩溃报告管理解决方案,提供客户端开发包以及基于PHP开发的服务器平台。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    主要功能:

     

    • (自动)向开发者数据库发送崩溃报告;
    • 由用户决定每次崩溃是否发送数据或总是发送;
    • 用户可对是否选择提供E-mail地址等额外信息进行设置;
    • 如果崩溃是已知的,向用户提供即时反馈,并在接下来的更新中进行修复。
    详情请参考:QuincyKit官网

     

    32. PSStackedView

    PSStackedView能够将你的UIViewControllers堆叠起来,实现了类似于Twitter iPad版应用效果的界面,项目发起人Peter Steinberger表示,PSStackedView的灵感正是来自于Twitter iPad的UI。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    为了开发非常受欢迎的奥地利TV应用3MobileTV的iPad版,Peter创作了PSStackedView,开发者可以直接登陆App Store下载该应用。PSStackedView可运行在iPad和iPhone上,但相对而言,更适合用在iPad上。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    33. Chameleon

    作为一名iOS开发者,你应该对苹果官方用于开发iPhone、iPod和iPad应用的UIKit框架很熟悉。Chameleon是一个完全独立的可以直接替代UIKit在Mac OS X上运行的框架,和UIKit唯一的共性就是公共类和方法名称。在大多数情况下,开发者不需要改动任何代码,即可直接在Mac上运行所开发的iOS应用。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    Chameleon的源代码是基于苹果的文档而来,并没有使用到任何私有API或其他未经Mac App Store批准的技术。如果想要了解更多关于Chameleon的信息,可直接登陆ChameleonProject网站查看。

    34. cocos2d-iphone-extensions

    Cocos2D-iPhone-Extensions整合了非常多的优秀的Cocos2D-iPhone引擎第三方扩展。该项目并没有对Cocos2D进行任何改变,只是将新功能源源不断地加入到Cocos2D-iPhone-Extensions中,供开发者使用。

    35. DCIntrospect

    Introspect是一个很小的iOS工具集,用于帮助开发者对使用UIKit构建的用户界面进行调试。特别适用于动态创建UI布局、改变运行时,还能通过寻找透明视图优化应用性能,并避免不必要的重绘视图。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    36. PSCollectionView

    PSCollectionView是一个能够实现Pinterest风格的瀑布流视图显示效果的iOS滚动组件,可用于类似的UITableView,支持显示图片和文字。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现 [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    项目发起人Peter Shih在自己的iPhone/iPad应用Lunchbox中使用了PSCollectionView源代码,开发者可以在App Store中免费下载该应用。

    37. SDURLCache

    NSURLCache及其子类提供了很多高级接口用于处理缓存,但如果你想在自己的iPhone应用中通过HTTP请求的方式将缓存存储到磁盘中,推荐使用SDURLCache。Peter Steinberger在GitHub上托管的这个SDURLCache项目是Olivier Poitrey的SDURLCache的一个分支,支持iOS 5以下版本系统。

    38. FastPdfKit

    该开源库包含着FastPdfKit iOS库的一些示例项目。FastPdfKit是一个能够让你在iOS应用中显示PDF文档的开发类库,其最大的特点就是加载PDF文档速度特别快。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    详情请参考:FastPdfKit官网

    39. KKGridView

    KKGridView是一个高性能的iOS表格组件,但自WWDC 2012大会上苹果推出了相关的解决方案之后,KKGridView也就逐渐停止使用了。每逢iOS系统更新,iOS开源项目势必也会发生新一轮的改变,至于在颠覆了苹果以往设计观的iOS 7发布之后,iOS开源项目又会发生哪些改变?还要看天才的开发者们!

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    40. MGBox2

    MGBox2能够实现非常酷的列表交互效果,使用最少代码,即可快速创建各种布局效果的iOS表格、网格,支持新增和删除网格,动态添加或删除列表,在表格中加入多行文字、图片等,支持手势识别和自定义事件。

    [iOS]直接拿来用!最火的iOS开源项目(二) - 小辉 - 理想 信念 实现

    分享到:
    参考知识库
    Android知识库35105  关注 | 3137  收录
    React知识库2740  关注 | 393  收录
    人工智能基础知识库13947  关注 | 206  收录
    Java 知识库28453  关注 | 3746  收录
    评论
    展开全文
  • ios开发常见问题

    2016-04-15 18:53:23
    原文地址:... 1.取消cell的分割线  tableview.separatorStyle = UITableViewCellSeparatorStyleNone; ...2.UITabelviewCell 的高亮状态的取消  ...-(void)tableView:(UITab

    原文地址:http://shavekevin.com/2016/04/12/iosdeveloptips/

    1.取消cell的分割线 

    tableview.separatorStyle = UITableViewCellSeparatorStyleNone;  
    

    2.UITabelviewCell 的高亮状态的取消 
    用以下方法:

    -(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
        //设置cell的背景是透明的。
        cell.backgroundColor = [UIColor clearColor];
        //取消cell的高亮状态
        cell.selectionStyle = UITableViewCellSelectionStyleNone;
    }
    
    
    //使用下面的这个方法会导致cell不能响应点击事件
    - (BOOL)tableView:(UITableView *)tableView shouldHighlightRowAtIndexPath:(NSIndexPath *)indexPath {
        return YES;
    }
    

    3.设置分割线的左右偏移量 

    tableview  setSeparatorInset:inset  
    

    4.推送如何跳转到对应的controller

    跳转界面

    - (void)push:(NSDictionary *)params
    {
        // 类名
        NSString *class =[NSString stringWithFormat:@"%@", params[@"class"]];
        const char *className = [class cStringUsingEncoding:NSASCIIStringEncoding];
    
        // 从一个字串返回一个类
        Class newClass = objc_getClass(className);
        if (!newClass)
        {
            // 创建一个类
            Class superClass = [NSObject class];
            newClass = objc_allocateClassPair(superClass, className, 0);
            // 注册你创建的这个类
            objc_registerClassPair(newClass);
        }
        // 创建对象
        id instance = [[newClass alloc] init];
     // 对该对象赋值属性
        NSDictionary * propertys = params[@"property"];
        [propertys enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
            // 检测这个对象是否存在该属性
            if ([self checkIsExistPropertyWithInstance:instance verifyPropertyName:key]) {
                // 利用kvc赋值
                [instance setValue:obj forKey:key];
            }
        }];
    
        // 获取导航控制器
        UITabBarController *tabVC = (UITabBarController *)self.window.rootViewController;
        UINavigationController *pushClassStance = (UINavigationController *)tabVC.viewControllers[tabVC.selectedIndex];
        // 跳转到对应的控制器
        [pushClassStance pushViewController:instance animated:YES];
    }
    

    检测对象是否存在该属性

    - (BOOL)checkIsExistPropertyWithInstance:(id)instance verifyPropertyName:(NSString *)verifyPropertyName
    {
        unsigned int outCount, i;
    
        // 获取对象里的属性列表
        objc_property_t * properties = class_copyPropertyList([instance
                                                               class], &outCount);
    
        for (i = 0; i < outCount; i++) {
            objc_property_t property =properties[i];
            //  属性名转成字符串
            NSString *propertyName = [[NSString alloc] initWithCString:property_getName(property) encoding:NSUTF8StringEncoding];
            // 判断该属性是否存在
            if ([propertyName isEqualToString:verifyPropertyName]) {
                free(properties);
                return YES;
            }
        }
        free(properties);
    
        return NO;
    }
    

    来源于简书: iOS 万能跳转界面方法 runtime实用篇一

    7.3D效果 还不错哦

    https://github.com/nicklockwood/iCarousel

    8.xcode7引入xmpp提示module libxmlsimu not found怎么解决?

    解决方案如下图:

    9.data进行MD5 加密

    https://github.com/shaojiankui/iOS-Categories/blob/master/Categories/Foundation/NSData/NSData%2BHash.m

    10.UIVisualEffectView 背景是虚化的(类似我们iphone查看通知时的虚化背景)

    https://github.com/nicklockwood/FXBlurView

    11.NSDate 的坑

    Also when using a date format string using the correct format is important.

    @"YYYY" is week-based calendar year.

    @"yyyy" is ordinary calendar year.

    可以看下面这篇博客:NSDateFormatter 'YYYY' 和 'yyyy' 的区别

    12.swift 实时滤镜

    http://blog.csdn.net/zhangao0086/article/details/39433519

    13.动态加载视频

    http://www.jianshu.com/p/3dcebf0493d1

    14.swift 闭包

    http://www.henishuo.com/closures-of-swift/

    15.理解contentsScale

    http://joeshang.github.io/2015/01/10/understand-contentsscale/#disqus_thread

    16.图文混排

    https://github.com/12207480/TYAttributedLabel

    19.textField 文字上下居中

    textField.contentVerticalAlignment =UIControlContentVerticalAlignmentCenter;
    
    
    //.全部删除按钮
    
    textField.clearButtonMode =UITextFieldViewModeWhileEditing;
    
    [textFieldsetAutocapitalizationType:UITextAutocapitalizationTypeNone];

    26.下面的view或self.view如果小于上面的,上面的view超过下面的部分将无法与用户交互。

    27.自定义cell时,最好在cell.contentView上加控件

    29.正则 

    (?<=src\s*\=\s*\")[\d\D]+?(?=\")
    

    取出html 中的src 图片 

    32.dealloc的super dealloc必须放在最后面

    33.所有不带星号的和id类型的都只能assign

    39.程序崩溃处理方法

    - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    
    {
    
    NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);
    
    }
    

    调用下面的方法,如数组越界,调用不存在的方法等会打出详细的信息。

    void UncaughtExceptionHandler(NSException*exception) {
    
       NSArray *arr = [exception callStackSymbols];
    
       NSString *reason = [exception reason];
    
       NSString *name = [exception name];
    
       NSLog(@"\nname: %@\reason: %@\nuserInfo: %@\ncallStackSymbols:%@\ncallStackReturnAddresses: %@",name,reason,[exceptionuserInfo],arr,[exceptioncallStackReturnAddresses]);
    
    }
    

    开启僵尸模式 Object-C的Enable Zombie Objects勾选,Memory 中的MallocStack勾选,Exceptions里的Log Exceptions勾选

    40.NSLog 怎么打印出变量类型的?

    NSStringFromSelector(SEL aSelector);
    
    NSSelectorFromString(NSString *aSelectorName);
    
    NSStringFromClass(Class aClass);
    
    NSClassFromString(NSString *aClassName);
    
    NSStringFromProtocol(Protocol *proto)
    
    NSProtocolFromString(NSString *namestr) 
    
    NSStringFromCGPoint(CGPoint point);
    
    NSStringFromCGVector(CGVector vector);
    
    NSStringFromCGSize(CGSize size);
    
    NSStringFromCGRect(CGRect rect);
    
    NSStringFromCGAffineTransform(CGAffineTransform transform);
    
    NSStringFromUIEdgeInsets(UIEdgeInsets insets);
    
    NSStringFromUIOffset(UIOffset offset);
    
    CGPointFromString(NSString *string);
    
    CGVectorFromString(NSString *string);
    
    CGSizeFromString(NSString *string);
    
    CGRectFromString(NSString *string);
    
    CGAffineTransformFromString(NSString *string);
    
    UIEdgeInsetsFromString(NSString *string);
    
    UIOffsetFromString(NSString *string);  
    展开全文
  • iOS平台内存常见问题 作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现的内存泄漏,这些都是iOS平台内存相关的常见问题;本文将会详细介绍iOS平台的内存管理机制...
  • 我现在碰到的情况是,我的项目是在IOS 10.3开发的。 mac电脑重装后,xcode版本里只有IOS 8.1的模拟器版本。所以运行项目提示,找不到模拟器。 解决方法: 方法一:修改项目 Deployment Target 为你XCODE里面已...
  • 一更改包名 二替换应用图标Launcher Icon 三jar类库升级 四SVN版本管理 五打开工程运行错误 六增加文字没有显示 七待更新IOS发展至今也有些年头了,很多公司,都...在这个过程,可能会遇到的问题,在这里进行
  • IOS项目中常见的文件

    2015-10-04 10:24:29
    Info.plist常见的设置 •建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 • •在旧版本Xcode创建的工程,这个配置...
  • iOS 开发常见问题

    2018-01-01 15:40:22
    1. 编译开源项目或网上的demo,直接崩溃,显示: Application windows are expected to have a root view controller at the end of application launch 解决方案: Xcode7.0 只需在AppDelega.m的...
  • IOS 项目性能优化

    2019-06-25 15:10:16
    iOS 项目性能优化一, iOS 性能优化概述1. 项目多余图片资源释放2. 缓存图片优化3. 界面卡顿优化4.列表阴影和圆角的处理5. 代码优化6. 安装包塑身 一, iOS 性能优化概述 项目多余的图片资源需要释放 选择...
  • iOS项目架构总结

    2019-11-05 17:01:55
    本文参考了Casa Taloyum 的文章, 并总结一些博主自身的经验, 总结归纳了此文章.从四层架构:视图层、业务层、网络层、本地数据层的各个方面来进行的总结
  • iOS项目中常见文件

    2014-09-22 07:41:52
    项目中常见文件   项目名Tests 做单元测试用的  frameworks 项目依赖的框架 products 对mac的有用 ,ios没有用   以上是一个 Single View Application Info.plist常见的设置 ,本质是上 xml 新建一个工程...
  • 1.提示错误信息 CUICatalog: Invalid asset name supplied: (null) 错误原因: 项目中用到了[UIImage imageNamed:name],但是这个name却是空的,所以报错了。 2.
  • iOS 如何优化项目

    2017-08-19 08:13:16
    项目业务趋于稳定的时候,开发完迭代需求后,我们可能会无所适从,进入一段空白期,但是对于攻城狮来说闲暇不是件好事,所以我们可能总想学点什么,却又没有头绪。这个时候我们就可以考虑完善和优化我们的项目了。...
  • 20个iOS开源项目

    2014-11-02 11:44:54
    摘要:iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已被弃用,有的则继续发扬光大,新项目更是层出不穷。在本文,我们将继续为大家介绍20个在GitHub上深受开发者欢迎的iOS开源...
  • 一 、iOS APP 上架流程简介1. 申请开发者账号 苹果的开发者账号主要分为个人(Individual)、公司(Company)、企业(Enterprise)、高校(University)四种类型,每年资费分别为$99、$99、$299、免费)。一般开发者...
  • iOS 项目框架搭建

    2018-07-28 09:57:23
    方式一:主项目结构按照MVC层次划分,内部结构再按照项目功能模块划分 采用这种分类方式可以将项目分为 Model,Controller,View三层,然后 Model 里面存放各个模块的 model,所有控制器全部放在 Controller ,...
  • GitHub上的iOS开源项目数不胜数,iOS每一次的改变,总会引发iOS开源项目的演变,从iOS 1.x到如今的iOS 7,有的项目已经被弃用,即使曾经的它很受开发者喜爱,有的项目则继续发扬光大,新项目更是层出不穷。...
  • iOS开发UI篇—常见项目文件介绍 一、项目文件结构示意图   二、文件介绍 1.products文件夹:主要用于mac电脑开发的可执行文件,ios开发用不到这个文件 2.frameworks文件夹主要用来放依赖的框架
  • 常用第三方今天就给大家总结一下,我们在项目中用到最多的第三方,免去了大家花时间去搜索,在这里大家进行了全面的总结.1. 编程框架1:基于响应式编程思想的oc 地址:...
1 2 3 4 5 ... 20
收藏数 46,369
精华内容 18,547
关键字:

ios 项目中遇见的问题