React native 财产';首选大扒手风格';在类型为';UIDatePicker';

React native 财产';首选大扒手风格';在类型为';UIDatePicker';,react-native,datetimepicker,react-native-ios,React Native,Datetimepicker,React Native Ios,我使用的是react native 0.62.2版本和datetimepicker 3.0.1版本。在我尝试使用xcode构建项目时,显示了以下错误: 使用未声明的标识符“UIDatePickerStyleCompact” 使用未声明的标识符“UIDatePickerStyleWheels” 在类型的对象上找不到属性“preferredDatePickerStyle” “RNDateTimePicker*” 在类型的对象上找不到属性“preferredDatePickerStyle” “UIDa

我使用的是react native 0.62.2版本和datetimepicker 3.0.1版本。在我尝试使用xcode构建项目时,显示了以下错误:

  • 使用未声明的标识符“UIDatePickerStyleCompact”
  • 使用未声明的标识符“UIDatePickerStyleWheels”
  • 在类型的对象上找不到属性“preferredDatePickerStyle” “RNDateTimePicker*”
  • 在类型的对象上找不到属性“preferredDatePickerStyle” “UIDatePicker*”
  • 将“NSInteger”(又名“long”)隐式转换为“id”是 不允许使用圆弧
  • 语句需要整数类型的表达式(“强id” (无效)
  • “UIDatePickerMode”(又名“枚举”)的隐式转换 ARC不允许将UIDatePickerMode')转换为“id”
  • 使用未声明的标识符“UIDatePickerStyleWheels”
  • 以下是RNDateTimePickerManager.h中的代码

    #import "RNDateTimePickerManager.h"
    
    #import <React/RCTBridge.h>
    #import <React/RCTEventDispatcher.h>
    #import "RNDateTimePicker.h"
    #import <React/UIView+React.h>
    
    @implementation RCTConvert(UIDatePicker)
    
    RCT_ENUM_CONVERTER(UIDatePickerMode, (@{
      @"time": @(UIDatePickerModeTime),
      @"date": @(UIDatePickerModeDate),
      @"datetime": @(UIDatePickerModeDateAndTime),
    }), UIDatePickerModeTime, integerValue)
    
    RCT_ENUM_CONVERTER(UIDatePickerStyle, (@{                //Error 5
        @"default": @(UIActionSheetStyleAutomatic),
        @"compact": @(UIDatePickerStyleCompact),             //Error 1
        @"spinner": @(UIDatePickerStyleWheels),              //Error 2
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000
        @"inline": @(UIDatePickerStyleInline),
    #endif
    }), UIActionSheetStyleAutomatic, integerValue)
    
    @end
    
    @implementation RNDateTimePickerManager
    
    RCT_EXPORT_MODULE()
    
    - (UIView *)view
    {
      return [RNDateTimePicker new];
    }
    
    + (NSString*) datepickerStyleToString: (UIDatePickerStyle) style {
        // RCTConvert does not handle this.?
        switch (style) {                                       //Error 6
            case UIDatePickerStyleCompact:
                return @"compact";
            case UIDatePickerStyleWheels:
                return @"spinner";
    #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 140000
            case UIDatePickerStyleInline:
                return @"inline";
    #endif
            default:
                [NSException raise:@"Unsupported style value" format:@"UIDatePickerStyle of %ld is unsupported", (long)style];
                return @"";
        }
    }
    
    RCT_EXPORT_METHOD(getDefaultDisplayValue:(NSDictionary *)options resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
    {
        dispatch_async(dispatch_get_main_queue(), ^{
            UIDatePicker* view = [RNDateTimePicker new];
            
            view.preferredDatePickerStyle = UIActionSheetStyleAutomatic;          //Error 4
            UIDatePickerMode renderedMode = [RCTConvert UIDatePickerMode:options[@"mode"]];
            view.datePickerMode = renderedMode;
            // NOTE afaict we do not need to measure the actual dimensions here, but if we do, just look at the original PR
            
            UIDatePickerMode determinedDisplayValue = view.datePickerMode;    //Error 7
    
            resolve(@{
                     @"determinedDisplayValue": [RNDateTimePickerManager datepickerStyleToString:determinedDisplayValue],
                    });
        });
    }
    
    RCT_EXPORT_VIEW_PROPERTY(date, NSDate)
    RCT_EXPORT_VIEW_PROPERTY(locale, NSLocale)
    RCT_EXPORT_VIEW_PROPERTY(minimumDate, NSDate)
    RCT_EXPORT_VIEW_PROPERTY(maximumDate, NSDate)
    RCT_EXPORT_VIEW_PROPERTY(minuteInterval, NSInteger)
    RCT_EXPORT_VIEW_PROPERTY(onChange, RCTBubblingEventBlock)
    RCT_REMAP_VIEW_PROPERTY(mode, datePickerMode, UIDatePickerMode)
    RCT_REMAP_VIEW_PROPERTY(timeZoneOffsetInMinutes, timeZone, NSTimeZone)
    
    RCT_CUSTOM_VIEW_PROPERTY(textColor, UIColor, RNDateTimePicker)
    {
        if (@available(iOS 14.0, *) && view.datePickerMode != UIDatePickerStyleWheels) {  //Error 8
        // prevents #247
        return;
      }
      if (json) {
        [view setValue:[RCTConvert UIColor:json] forKey:@"textColor"];
        [view setValue:@(NO) forKey:@"highlightsToday"];
      } else {
        UIColor* defaultColor;
        if (@available(iOS 13.0, *)) {
            defaultColor = [UIColor labelColor];
        } else {
            defaultColor = [UIColor blackColor];
        }
        [view setValue:defaultColor forKey:@"textColor"];
        [view setValue:@(YES) forKey:@"highlightsToday"];
      }
    }
    
    // TODO vonovak setting preferredDatePickerStyle invalidates minuteinterval
    RCT_CUSTOM_VIEW_PROPERTY(displayIOS, UIDatePickerStyle, RNDateTimePicker)
    {
        if (@available(iOS 13.4, *)) {
            if (json) {
                UIDatePickerMode propValue = [RCTConvert UIDatePickerStyle:json];
                view.preferredDatePickerStyle = propValue;           //Error 3
            } else {
                view.preferredDatePickerStyle = UIActionSheetStyleAutomatic;
            }
        }
    }
    
    @end
    
    #导入“RNDateTimePickerManager.h”
    #进口
    #进口
    #导入“RNDateTimePicker.h”
    #进口
    @实现RCTConvert(UIDatePicker)
    RCT_枚举_转换器(UIDatePickerMode(@{
    @“时间”:@(UIDatePickerModeTime),
    @“日期”:@(UIDatePickerModeDate),
    @“日期时间”:@(UIDatePickerModeDateAndTime),
    }),UIDatePickerModeTime,integerValue)
    RCT_ENUM_转换器(UIDatePickerStyle,(@{//错误5
    @“默认值”:@(UIActionSheetStyleAutomatic),
    @“压缩”:@(UIDatePickerStyleCompact),//错误1
    @“微调器”:@(UIDatePickerStyleWheels),//错误2
    #如果允许的IPHONE操作系统版本数>=140000
    @“内联”:@(UIDatePickerStyleInline),
    #恩迪夫
    }),UIActionSheetStyleAutomatic,integerValue)
    @结束
    @RNDateTimePickerManager的实现
    RCT_导出_模块()
    -(UIView*)视图
    {
    返回[RNDateTimePicker new];
    }
    +(NSString*)日期选择器样式字符串:(UIDatePickerStyle)样式{
    //RCTConvert不处理此问题。?
    开关(样式){//错误6
    案例UIDatePickerStyleCompact:
    返回@“紧凑”;
    案例UIDatePickerStyleWheels:
    返回@“微调器”;
    #如果允许的IPHONE操作系统版本数>=140000
    案例UIDatePickerStyleInline:
    返回@“内联”;
    #恩迪夫
    违约:
    [N异常提升:@“不支持的样式值”格式:@“不支持%ld的UIDatePickerStyle”,(长)样式];
    返回@”;
    }
    }
    RCT_导出方法(getDefaultDisplayValue:(NSDictionary*)选项解析程序:(RCTPromiseResolveBlock)解析拒绝程序:(RCTPromiseRejectBlock)拒绝)
    {
    dispatch\u async(dispatch\u get\u main\u queue()^{
    UIDatePicker*视图=[RNDateTimePicker新建];
    view.preferredDatePickerStyle=UIActionSheetStyleAutomatic;//错误4
    UIDatePickerMode renderedMode=[RCT转换UIDatePickerMode:options[@“mode”];
    view.datePickerMode=renderedMode;
    //注意:这里我们不需要测量实际尺寸,但如果需要,只需查看原始PR
    UIDatePickerMode determinatedDisplayValue=view.datePickerMode;//错误7
    决心(@{
    @“DeterminatedDisplayValue”:[RNDateTimePickerManager datepickerStyleToString:DeterminatedDisplayValue],
    });
    });
    }
    RCT\u导出\u视图\u属性(日期,NSDate)
    RCT\u导出\u视图\u属性(区域设置,NSLocale)
    RCT\u导出\u视图\u属性(minimumDate、NSDate)
    RCT\u导出\u视图\u属性(maximumDate、NSDate)
    RCT\u导出\u视图\u属性(分钟间隔,NSInteger)
    RCT\u导出\u视图\u属性(onChange、RCTBubblingEventBlock)
    RCT\u重新映射\u视图\u属性(模式、datePickerMode、UIDatePickerMode)
    RCT_重新映射_视图_属性(timeZoneOffsetInMinutes、timeZone、NSTimeZone)
    RCT_自定义_视图_属性(textColor、UIColor、RNDateTimePicker)
    {
    如果(@available(iOS 14.0,*)&&view.datePickerMode!=UIDatePickerStyleWheels){//错误8
    //防止#247
    返回;
    }
    if(json){
    [查看设置值:[RCTConvert UIColor:json]forKey:@“textColor”];
    [查看设置值:@(否)forKey:@“highlightsToday”];
    }否则{
    UIColor*默认颜色;
    如果(@可用(iOS 13.0,*)){
    defaultColor=[UIColor-labelColor];
    }否则{
    defaultColor=[UIColor blackColor];
    }
    [查看设置值:defaultColor forKey:@“textColor”];
    [查看设置值:@(是)forKey:@“highlightsToday”];
    }
    }
    //TODO vonovak设置preferredDatePickerStyle使分钟间隔无效
    RCT\u自定义\u视图\u属性(displayIOS、UIDatePickerStyle、RNDateTimePicker)
    {
    如果(@可用(iOS 13.4,*)){
    if(json){
    UIDatePickerMode propValue=[RCTConvert UIDatePickerStyle:json];
    view.preferredDatePickerStyle=propValue;//错误3
    }否则{
    view.preferredDatePickerStyle=UIActionSheetStyleAutomatic;
    }
    }
    }
    @结束
    

    react native datetimepicker中有任何错误吗?

    您可以使用最新的稳定XCode(11.6)。

    对于那些仍然停留在这个问题上的人,特别是使用库

    从版本3.0.3开始,它要求您的Xcode至少为v11,但他们从未提到v11.3将无法工作,许多人已经注意到您至少需要v11.6


    请注意,降级可能也不会真正帮助您,因为您错过了更新点,它解决了许多错误,例如

    非常随机的问题。但是将Xcode v11.3更新为v12.0解决了这个问题。