20160929 iOS项目问题总结

提交APPStore审核因ipv6问题被拒

We discovered one or more bugs in your app when reviewed on iPhone running iOS 10.0.2 on Wi-Fi connected to an IPv6 network.

  • Unable to log in
  • Internet issue
    We've attached screenshot(s) for your reference.
    经过在ipv6环境下测试问题没有复现,等待结果(重新提交二进制文件后审核通过,并没有什么问题)

2016年10月27日,提交的新版本UI调整,再次被拒绝,原因是登录页面键盘遮挡按钮(以后注意,有输入的页面,键盘一定要能够随时收起,细节!)

关于CollectionView

使用storyboard创建collectionView时需要自定义header和footer,只要勾选上Section Header和Section Footer两个选项两个reuseView就会出现在storyboard里面,不需要自己去控件里拖(关键是拖也拖不进去……),分别设置好identifier,代码里面复用时要分清,虽然两个reuseView看着一样。

关于一些UI上出现的奇怪的Bug

一些界面的子控件并不是铺满整个屏幕,因此控件之间衔接的缝隙要多加注意,例如tableView或者collectionView和底部自定义Bar之间。
在collectionView的cell里面有个imageView,约束什么的都做好了,可是发现显示出来图片距离上边界的距离跟设置的怎么不一样?!怎么调都调不好,最后发现是图片的contentMode设置问题,图片超出控件显示了。

关于自定义转场的问题

项目中用到了自定义转场(present和dimiss)弹出,但是实现后发现弹出动画会有长时间卡顿,难道presentViewController方法是异步执行的?解决办法:

dispatch_async(dispatch_get_main_queue(), ^{
                [self presentViewController:popupVC animated:YES completion:nil];
            });

弹出后另一个controller后还想实现点击背景区域返回(dissmiss),这比单纯的点按钮返回稍微复杂,解决办法(给window添加手势):

/*添加一个点击背景返回fromVC的手势*/
- (void)addTapDismiss {
    UIWindow *appWindow = [UIApplication sharedApplication].keyWindow;
    UITapGestureRecognizer *tapGes = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleTapBehind:)];
    [tapGes setNumberOfTapsRequired:1];
    tapGes.cancelsTouchesInView = NO;
    [appWindow addGestureRecognizer:tapGes];
}
- (void)handleTapBehind:(UITapGestureRecognizer *)sender {
    if (sender.state == UIGestureRecognizerStateEnded){
        CGPoint location = [sender locationInView:nil];
        if (![self.view pointInside:[self.view convertPoint:location fromView:self.view.window] withEvent:nil]){
            [self.view.window removeGestureRecognizer:sender];
            [self dismissAction:nil];
        }  
    }
}
关于统一性的问题

不同界面会用到相同表现形式的Cell或者View,最好能够复用,以便统一管理和更改,用单独的xib或者单独的类来定义这些公共的view应该是最好的选择。

数据格式导致的崩溃问题

1.创建字典时因为数据来源问题致使value为nil
2.使用三方库dateTool时的[NSDate dateWithString:serverDate formatString:ServerDateFormat]方法,传入的string为空时崩溃
3.往一个字符串的指定位置index插入字符,如果该字符串长度为0
4.在创建NSMutableString或者是NSMutableAttributedString时,使用initWithString方法时传入nil会崩溃

so,we should
  • 不要过分相信服务器返回的数据格式
  • 在对数据处理上,要进行容错处理,进行相应判断之后再处理数据,这是一个良好的编程习惯

你可能感兴趣的:(20160929 iOS项目问题总结)