Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

问题描述:自定义主题拍照预览出现黑屏。一次正常一次黑屏一次正常一次黑屏,黑屏时重拍后能正常预览。预览黑屏时控制台输入Log如下:

Snapshotting a view that has not been rendered results in an empty snapshot. Ensure your view has been rendered at least once before snapshotting or snapshot after screen updates.

问题分析:iPhone5S有问题,iPad2没问题。看了iPhone5S中系统的拍照也是有同样问题,判断为系统bug。

官方UIImagePickerController的例子,自己实现拍照按钮,在iPhone5S上正常。
https://developer.apple.com/LIBRARY/IOS/samplecode/PhotoPicker/Listings/PhotoPicker_APLViewController_m.html#//apple_ref/doc/uid/DTS40010196-PhotoPicker_APLViewController_m-DontLinkElementID_6

这是一个老外写的UIImagePickerController的例子,简单使用,在iPhone5S上黑屏。
https://github.com/bartvandeweerdt/CameraTest

看了黑屏时,View的层级,有一个黑色的CAMBlurredSnapshotView覆盖在上面。手动把其removeFromSuperView,预览只有一帧,并不会更新。

问题解决:此bug为系统bug。从iOS8.0到iOS8.1都有,苹果并没有修复。并不是每台都有这个问题,但是一旦有这个问题,就会一直存在,除非重装系统。

现在的解决办法只有参考官方例子自己实现拍照按钮。

 

PS:系统都为iOS8.1

A valid provisioning profile for this executable was not found.

问题描述:昨天设备突然出现不能安装调试,Xcode出现如下错误:

A valid provisioning profile for this executable was not found.

问题分析:重启Xode、重启iPad无果。

看下设备log,如下:

Dec 17 14:41:36 zhonglixunde-iPad kernel[0] <Notice>: flow_divert_token_set (0): Failed to get the key unit from the token: 22
Dec 17 14:41:36 zhonglixunde-iPad lockdownd[24] <Error>: Could not set socket option SO_OPPORTUNISTIC: Invalid argument
Dec 17 14:41:36 zhonglixunde-iPad misagent[222] <Error>: attempt to install invalid profile: 0xe8008011

以为是连接问题,所有换了根线,还是报错。

问题解决:最后iPad“还原所有设置”,搞定。

 

PS:iPad2 iOS8.1,Xcode  6.1

UIImagePickerController横竖屏问题

问题描述:皮肤商店-自定义主题中有个拍照功能,iOS 8.1下旋转后需要歪脖子观看。

问题分析:UIImagePickerController在iOS 8.0中,不会随设备旋转。同事手动旋转来修复了这个bug。
8.1中,Apple修复了以上的这个bug。但是手动代码还是执行了,导致到了一次旋转。

问题解决:对8.0做特殊化处理:只有在8.0中采用手动旋转

hidesBottomBarWhenPushed 黑影bug

问题描述:
在storyboard中勾选UIViewController的Hide Bottom Bar On Push属性,或者设置UIViewController的hidesBottomBarWhenPushed为YES。然后进行UINavigationController的push操作。切换ViewController时,导航栏右边会出现黑色类似阴影的东西。
问题分析:
此为iOS的bug,只能绕开hidesBottomBarWhenPushed。
问题解决:
可以通过在代码中控制UITabBarController的tabBar的hidden属性来隐藏bottom bar。
在需要隐藏的ViewController的ViewWillAppear中,将其设置为YES;在需要显示的VewController的ViewWillAppear中,将其设置为NO.

PS: under iOS8, Xcode beta6 GM

iOS8 Extension中横竖屏Notification问题

问题描述:输入法Extension中使用Notification监听UIApplicationDidChangeStatusBarOrientationNotification,发现userInfo中返回转屏前方向

问题分析:使用self.interfaceOrientation发现同样返回的是转屏前方向。查了下文档,发现:

UIApplicationWillChangeStatusBarOrientationNotification
Posted when the app is about to change the orientation of its interface.

UIApplicationDidChangeStatusBarOrientationNotification
Posted when the orientation of the app’s user interface changes.

问题解决:替换为UIApplicationWillChangeStatusBarOrientationNotification监听事件,返回正常

PS:Xcode6 beta5, iOS8 ,Keyboard Extension

Swift下Array不能使用!可变标记

问题描述:Xcode beta4的Array从

  • var path:CGPath
  • []改成了

  • var path:[CGPath]
  • 这种用法。然后定义成

  • var path:[CGPath]!
  • ,报错如下:
    Immutable value of type only has mutating members named 'append'

    问题分析:可空符号其实是一层封装,使用时实际上需要压包和解包。使Array变成了let。可能是Xcode的一个bug。
    暂时先去除!,这样用:

  • var path:[CGPath]
  • 在App没有运行的情况下通知中心不回调的问题

    问题描述:推送使用的是BPush,并实现了应用内跳转。在App没有运行(包括后台运行)的情况下,点击推送,跳转失效。
    问题分析
    在App没有运行(包括后台运行)的情况下
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    函数不回调的问题

    问题解决
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    在此函数中可以拿到回调数据,然后做处理
    NSDictionary* userInfo=[launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if(userInfo)
    {
    [self application:application didReceiveRemoteNotification:userInfo];
    }

    iOS8中设置App红点提示没有权限的问题

    问题描述:在iOS8中调用-[UIApplication setApplicationIconBadgeNumber:]会出现如下没有权限的提示:
    Attempting to badge the application icon but haven't received permission from the user to badge the application
    问题分析
    用如下方法注册通知权限后,App会弹出一个框进行确认。在确认之前或者被否决,都是没有权限设置红点的。
    UIUserNotificationSettings* notificationSettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [[UIApplication sharedApplication] registerUserNotificationSettings:notificationSettings];
    iOS8中新增了通知授权后的回调:
    - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
    问题解决
    把所有
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions中的-[UIApplication setApplicationIconBadgeNumber:]
    移到
    - (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings
    回调中

    UITableView第一个Header不显示的问题

    问题描述:今天让设置项适配iPad,用[tableView: viewForHeaderInSection:]函数自定义UITableView的Header,发现第一个Header没有显示。

    问题解决
    原因是没有给[tableView: viewForHeaderInSection:]返回UIView设置高度。
    并且也没有通过-(CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section指定高度。

    前面2个原因实现一个便可以显示出第一个Header。