#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’ не найдено для объекта типа ‘UIDatePicker*’
- Неявное преобразование ‘NSInteger’ (он же ‘long’) в ‘id’ запрещено с помощью ARC
- Оператор требует выражения целочисленного типа (недопустимый ‘__strong id’)
- Неявное преобразование ‘UIDatePickerMode’ (он же ‘enum UIDatePickerMode’) в ‘id’ запрещено с помощью ARC
- Использование необъявленного идентификатора ‘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, *) amp;amp; 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
Есть ли какая-либо ошибка в react-native datetimepicker?
Ответ №1:
Для тех, кто все еще застрял на этом, в частности, используя эту библиотеку.
Начиная с версии 3.0.3, требуется, чтобы ваш Xcode был как минимум v11, но они никогда не упоминают, что v11.3 не будет работать, что многие люди уже заметили, что вам понадобится как минимум v11.6.
Имейте в виду, что понижение рейтинга может вам тоже не очень помочь, поскольку вы упускаете момент обновления, который устраняет множество ошибок, например, # 217 fix
Ответ №2:
вы можете использовать последнюю стабильную версию XCode (11.6).
Комментарии:
1. Действительно случайная проблема. Но обновление Xcode с версии 11.3 до версии 12.0 устранило проблему.
Ответ №3:
Лучший ответ для этого — обновить xcode как минимум до версии 11.6. Я решал проблемы, связанные с этим, более 48 часов, и в конце, когда приложение успешно завершило сборку, я боролся с отсутствующими зависимостями.