henninghall / react-native-date-picker

React Native Date Picker is datetime picker for Android and iOS. It includes date, time and datetime picker modes. The datepicker is customizable and is supporting different languages. It's written with native code to achieve the best possible look, feel and performance.
MIT License
2.21k stars 338 forks source link

[iOS v16.x.x] Fatal Exception: NSInternalInconsistencyException - UITableView dataSource is not set | "UIDatePickerStyleWheels" date picker api crashed #793

Open k-saparia opened 5 months ago

k-saparia commented 5 months ago

Describe the bug

Expected behavior

To Reproduce

export default class App extends Component {

  state = { date: new Date() }

  render = () =>
    <DatePicker
      date={this.state.date}
      onDateChange={date => this.setState({ date })}
      mode={"date"}
      locale={'en'}
      style={{
            width: Dimensions.get('window').width,
            height: Dimensions.get('window').height / 3,
            backgroundColor: '#FFF',
          }}
      textColor={'#000000'}
    />

}

Smartphone (please complete the following information):

image
k-saparia commented 5 months ago

Workaround

-(void)setup {
    if(@available(iOS 13, *)) {
        self.overrideUserInterfaceStyle = UIUserInterfaceStyleLight;
    }
    if (@available(iOS 13, *)) {
        self.preferredDatePickerStyle = UIDatePickerStyleInline; // it will use "Calendar" style date picker for iOS v13 to v16
    } 
    if (@available(iOS 17, *)) {
        self.preferredDatePickerStyle = UIDatePickerStyleWheels; // // it will use traditional (rolling wheels) style date picker for iOS v17 and later
    }
    self.calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
}
k-saparia commented 5 months ago

@henninghall Please try to reproduce this crash on your side. If issue persists, please update this library with an effective solution. Thanks!

henninghall commented 5 months ago

I don't manage to reproduce this. Please provide a repo where this is reproduced, together with name simulator phone name + exact iOS version of the simulator. Thanks

stesvis commented 3 months ago

I just had this happen in my EXPO app, on iOS. I was selecting the year, and when the spinner stopped, the app crashed. All I can see in Sentry is NSInternalInconsistencyException: UITableView dataSource is not set:

{
beingPresented: true,
is_window_rootViewController: false,
presentingViewController: UIViewController,
screen: RCTModalHostViewController,
window: <UIWindow: 0x10130b960; frame = (0 0; 375 812); autoresize = W+H; gestureRecognizers = <NSArray: 0x2809cbe70>; layer = <UIWindowLayer: 0x2809cb780>>,
window_isKeyWindow: true,
window_windowLevel: 0.000000
}

I've never reproduced it locally but it happened in release mode. Seems like it happens the first time you try to use it, then it doesn't happen again.