`

升级iOS8之后,cordova DatePicker插件的bug

 
阅读更多

升级到iOS8之后,通过cordova的DatePicker插件弹出UIDatePicker控件,会导致应用crash,报错:

Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource is not set'

查看DatePicker的源码:

if(!self.datePicker){
            self.datePicker = [self createDatePicker:options frame:frame];
            [self.datePicker addTarget:self action:@selector(dateChangedAction:) forControlEvents:UIControlEventValueChanged];
        }

它的目的是不重复创建UIDatePicker,只在第一次弹出时创建一个UIDatePicker的实例,然后就往新的UIView上挂,其结果就是多个UIView共享同一个UIDatePicker实例。这个行为在iOS7下成立,但是在升级到iOS8之后就会导致crash

所以将这段代码改成:

// in iOS8, UIDatePicker couldn't be shared in multi UIViews, it will cause crash. so create new UIDatePicker instance every time
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) {
        
        self.datePicker = [self createDatePicker:options frame:frame];
        [self.datePicker addTarget:self action:@selector(dateChangedAction:) forControlEvents:UIControlEventValueChanged];
        
    }else{
        
        if(!self.datePicker){
            self.datePicker = [self createDatePicker:options frame:frame];
            [self.datePicker addTarget:self action:@selector(dateChangedAction:) forControlEvents:UIControlEventValueChanged];
        }
    }

另外,iOS是不建议UIView共享实例的,包括多个UIView共享控件,把一个UIView挂到不同的UIViewController下,或者把UIView设置成单例,都是不好的做法。自己写代码的时候也要注意避免
分享到:
评论

相关推荐

    在存在iOS项目添加Cordova实现H5调用设备相册

    在iOS项目中集成Cordova并实现H5调用设备相册的功能,是移动应用开发中的一个常见需求。Cordova是一个开源框架,它允许开发者使用HTML、CSS和JavaScript来构建原生移动应用程序。通过Cordova,我们可以利用Web技术来...

    cordova ios 自定义插件例子

    这个"cordova ios 自定义插件例子"是一个适合新手入门的学习资源,它会引导你了解如何为 iOS 平台创建和使用自定义 Cordova 插件。 在 Cordova 中,插件是连接 JavaScript 世界与原生平台代码的桥梁。它们使你能...

    cordova-screenshot cordova截屏插件

    cordova-screenshot cordova截屏插件 document.addEventListener("deviceready", init, false); function init() { document.querySelector("#share").addEventListener("touchend", function() { navigator....

    cordova3.0 ios自定义插件demo

    这个“cordova3.0 ios自定义插件demo”是针对iOS平台的一个示例,用于展示如何在Cordova 3.0及以上版本中创建和使用自定义插件。 首先,理解Cordova插件的结构至关重要。每个Cordova插件都是由一个或多个平台特定的...

    iOS phonegap/Cordova实现打开通讯录添加联系人插件

    尽管这里主要讨论的是iOS环境,但PhoneGap/Cordova的跨平台特性意味着通讯录插件也可以在Android或其他支持Cordova的平台上使用。不同平台可能有不同的API和权限管理机制,因此插件通常会根据目标平台进行条件编译...

    ios-iOS关于Cordova运用插件JiaCordova.zip

    JiaCordova是为了让项目对于Cordova引入更加方便快捷的一个封装式插件,插件中已经集成的关于Cordova跟其一些常用的第三库,对于Cordova的配置模板也进行整理,且封装从服务端下载ZIP包进行解压到沙盒文件夹中,利用...

    一款针对iOS系统的Cordova插件,实现生物识别.zip

    一款针对iOS系统的Cordova插件,实现生物识别(即Touch ID以及Face ID)功能(A Cordova plug-in for iOS system to realize biometrics (Touch ID and Face ID) function.). 软件开发设计:PHP、QT、应用软件开发...

    基于cordova插件形式开发的版本升级插件,支持android和iOS.zip

    本压缩包文件“基于cordova插件形式开发的版本升级插件,支持android和iOS.zip”提供了一个专为Cordova设计的版本更新插件,适用于Android和iOS两大平台。这个插件的目标是帮助开发者轻松地实现在应用内部进行版本的...

    自定义cordova插件

    当我们谈论自定义Cordova插件时,通常是因为Cordova默认提供的插件无法满足我们的全部需求,或者我们需要与特定的后端服务或硬件进行交互。自定义插件的创建过程包括以下几个步骤: 1. **创建插件结构**:首先,你...

    cordova iOS自定义插件

    本文将深入探讨如何在Cordova中进行iOS自定义插件的开发,以及如何通过这样的插件获取设备的版本信息。 首先,了解Cordova的基本工作原理至关重要。Cordova将Web应用程序封装在一个原生的移动应用壳中,通过WebView...

    cordova插件小例(他人)

    8. **插件发布**:如果你想分享你的自定义插件,可以通过 GitHub 或者 npm 发布。这样其他开发者可以方便地通过 `cordova plugin add <plugin_id>` 或 `npm install cordova-plugin-name` 来安装使用。 9. **优化与...

    支持android 蓝牙设备插件 cordova的插件

    本文将详细探讨“支持android 蓝牙设备插件 cordova的插件”这一主题,包括Cordova的蓝牙插件、官方示例和两个相关的压缩包资源。 首先,Cordova的蓝牙插件通常是为了扩展Cordova应用程序的原生功能,使得...

    简单的Cordova插件for iOS

    本文将深入探讨如何创建一个简单的Cordova插件,以便在iOS应用中调用。 首先,我们需要了解Cordova插件的基本结构。一个Cordova插件通常由两部分组成:JavaScript接口和平台特定的代码(在本例中是Objective-C或...

    cordova自定义插件

    在Cordova中,自定义插件是扩展其功能的关键机制,它们提供了JavaScript和原生平台代码之间的桥梁,使得Web应用程序能够访问设备的硬件特性和原生API。 ### 1. Cordova插件的基本结构 一个Cordova插件通常包含以下...

    Cordova ios 打包

    Cordova 提供了多种插件,使你能够利用 iOS 的原生功能,如推送通知、GPS 定位、蓝牙等。安装插件通常使用命令: ``` cordova plugin add ``` 10. **性能优化** 为了获得更好的性能,可以考虑使用 WebPack、...

    ionic3自定义cordova插件

    2. **创建插件结构**:使用`cordova plugin add <your-plugin-id>`命令初始化一个新插件,这将创建基本的插件目录结构,包括`plugin.xml`配置文件,以及Android和iOS的源代码目录。 3. **编写插件代码**: - **JS...

    Cordova打包ios平台

    2. **平台支持**: Cordova 支持多种操作系统,包括 iOS、Android、Windows Phone 等,通过插件系统,开发者可以轻松地添加或移除对特定功能的支持。 3. **WebView**: 在 Cordova 应用中,HTML、CSS 和 JavaScript ...

    Cordova 4.2.0插件应用及开发

    本篇文章将深入探讨Cordova 4.2.0版本中的插件应用与开发,特别是如何获取手机信息、检查手机网络连接状态、实现弹出插件、创建自定义土司插件以及设置app自动升级。 首先,获取手机信息是移动应用中常见的需求。在...

    支持 Android 和 iOS 的用于指纹传感器(和 FaceID)的 Cordova 插件_java_代码_下载

    该插件的 4.0 版本是对以前版本的重大升级。以前的版本只允许视觉指纹提示。4.0 版允许在生物识别提示后面保存加密的秘密,以实现真正的安全性。请对其进行测试并报告任何问题。如果此插件有安全问题,请检查安全...

    百度地图定位Cordova插件

    【百度地图定位Cordova插件】是专门为Cordova框架设计的一款插件,它允许开发者集成百度地图服务到他们的移动应用程序中,实现精准的定位功能。Cordova是一个流行的开源框架,它使得开发者可以使用HTML5、CSS3和...

Global site tag (gtag.js) - Google Analytics