Imagepicker React Native падает на iOS, но отлично работает на Android - PullRequest
0 голосов
/ 03 апреля 2020

Я сейчас использую ImagePicker на реагировать родной. Когда я использую android, чтобы выбрать изображение, оно работает нормально. Однако при использовании iOS происходит сбой при выборе фотографии.

Эта ошибка отображается в отладчике xcode:

2020-04-03 11: 54: 27.802434 +0800 app [7218: 1993193] - [NSURLResponse allHeaderFields]: нераспознанный селектор отправлен в экземпляр 0x28281aba0 2020-04-03 11: 54: 27.802766 + 0800 app [7218: 1993193] * Завершение работы приложения из-за неисключенного исключения 'NSInvalidArgumentException », причина: '- [NSURLResponse allHeaderFields]: непризнанные селектор направлен например 0x28281aba0' * Первый бросок стека вызовов: (0x19d01c164 0x19cd30c1 c 0x19cf1a7e0 0x19d02085 c 0x19d022b60 0x102b27bc8 0x102b27a90 0x102b01ce0 0x1059f5d10 0x1059f718 c 0x1059fe968 0x1059ff580 0x105a0b0f0 0x19cd23714 0x19cd299c8) libc ++ abi.dylib: завершается с необработанным исключением типа NSException

, и это мой код:

chooseImage = async (id) => {
        //await this.askPermissionsAsync();
        let options = {
          title: 'Select Image',
          storageOptions: {
            skipBackup: true,
            path: 'images',
          },
        };
        ImagePicker.showImagePicker(options, (response) => {
          console.log('Response = ', response.error);

          if (response.didCancel) {
            console.log('User cancelled image picker');
          } else if (response.error) {
            console.log('ImagePicker Error: ', response.error);
          } else {
            const source = { uri: response.uri };

            // You can also display the image using data:
            // const source = { uri: 'data:image/jpeg;base64,' + response.data };
            // alert(JSON.stringify(response));


            let file_data = [...this.state.fileData];
            file_data[id] = response.data;

            let file_uri = [...this.state.fileUri];
            file_uri[id] = response.uri;

            this.setState({filePath:response, fileData: file_data, fileUri: file_uri});
          }
        });
      }

Я также добавил разрешения в информацию. plist:

    <key>NSCameraUsageDescription</key>
    <string></string>
    <key>NSPhotoLibraryUsageDescription</key>
    <string></string>
    <key>NSPhotoLibraryAddUsageDescription</key>
    <string></string>
    <key>NSDocumentsFolderUsageDescription</key>
    <string></string>

, но проблема все еще сохраняется в ios.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2020

Реактивная ссылка не связывала библиотеку, поэтому библиотека выбора мага не была собрана с приложением. Вот почему я как исключение нулевого указателя, потому что не было lib.

Или вручную добавить библиотеку.

<key>NSCameraUsageDescription</key>
	<string>Access to take a photo by camera</string>
<key>NSAppleMusicUsageDescription</key>
	<string>Access to pick a photo</string>
<key>NSPhotoLibraryUsageDescription</key>
	<string>Access to pick a photo</string>
0 голосов
/ 03 апреля 2020

Проблема была

'data:image/jpeg;base64,' + this.state.fileData[id]

при отображении тега изображения. Эта проблема указана здесь:

YellowBox Cra sh

Изображение Cra sh с данными: image / png; base64

Я решил добавить опцию «noData: true» и получить прямой доступ к расположению файла URI в теге изображения.

Надеюсь, это поможет

...