React native React Native ImagePicker.launchImageLibrary不工作,应用程序关闭而不是拾取图像
我的应用程序中有react本机图像选择器。如果我正在调用ImagePicker.launchImageLibrary,则应用程序将关闭,而不是打开库。当我调用ImagePicker.showImagePicker和Choose from library时,同样的行为也会发生。。选项应用程序也正在关闭。我使用了来自官方文档的相同代码,在XCode、连接库和Pods中进行了所有安装,没有任何错误。谁能帮帮我吗React native React Native ImagePicker.launchImageLibrary不工作,应用程序关闭而不是拾取图像,react-native,react-native-image-picker,React Native,React Native Image Picker,我的应用程序中有react本机图像选择器。如果我正在调用ImagePicker.launchImageLibrary,则应用程序将关闭,而不是打开库。当我调用ImagePicker.showImagePicker和Choose from library时,同样的行为也会发生。。选项应用程序也正在关闭。我使用了来自官方文档的相同代码,在XCode、连接库和Pods中进行了所有安装,没有任何错误。谁能帮帮我吗 import React, { useState } from 'react' impor
import React, { useState } from 'react'
import { View, FlatList, StyleSheet } from 'react-native'
import ImagePicker from 'react-native-image-picker'
import { ChannelItem, ModalChannelCard, SearchBar, ScreenHeader } from '../../components'
import { data } from '../../dataDraft'
import { TOPICS_SCREEN } from '../routes'
const styles = StyleSheet.create({
container: {
flex: 1
},
textStyle: {
fontSize: 25,
fontWeight: 'bold'
}
})
const ChannelsScreen = ({ navigation }) => {
const { container, textStyle } = styles
const [isModalVisible, setModalVisible] = useState(false)
const [newChannelImage, setNewChannelImage] = useState({
channelImage: null,
loading: false
})
const [newChannelTitle, setNewChannelTitle] = useState('')
const [userInput, setInput] = useState({
value: '',
isEmpty: true
})
const onChangeTexthandler = value => {
setInput({
value,
isEmpty: false
})
}
const onPressXButtonHandler = () => {
setInput({
value: '',
isEmpty: true
})
}
const hideModalHandler = () => {
setModalVisible(false)
}
const setChannelImageHandler = ({ source }) => {
setNewChannelImage({
channelImage: source,
loading: true
})
}
const rightIconPressHandler = () => {
setModalVisible(true)
}
const chooseChannelImageHandler = () => {
const options = {
title: 'Select Image',
storageOptions: {
skipBackup: true,
path: 'images'
}
}
ImagePicker.showImagePicker(options, response => {
console.log('Response = ', response)
if (response.didCancel) {
console.log('User cancelled image picker')
} else if (response.error) {
console.log('ImagePicker error: ', response.error)
} else if (response.customButton) {
console.log('User tapped custom button: ', response.customButton)
alert(response.customButton)
} else {
const source = { uri: response.uri }
setChannelImageHandler(source.uri)
}
})
}
const newTitleHandler = value => {
setNewChannelTitle(value)
}
return (
<View style={container}>
<ScreenHeader header="Channels" rightIconName="ios-add" onRightIconPress={rightIconPressHandler} />
<SearchBar
value={userInput.value}
placeholder="Search channel..."
isEmpty={userInput.isEmpty}
onChangeText={onChangeTexthandler}
onPressXButton={onPressXButtonHandler}
/>
<ModalChannelCard
buttonAddChannelPushed={newChannelImage.loading}
channelImage={newChannelImage.channelImage}
chooseChannelImage={chooseChannelImageHandler}
createChannel={hideModalHandler}
hideModal={hideModalHandler}
onChangeTitle={newTitleHandler}
titleValue={newChannelTitle}
visible={isModalVisible}
/>
<View style={{ alignItems: 'center' }}>
<FlatList
data={data}
numColumns={2}
autoCorrect={false}
keyboardShouldPersistTaps="always"
keyboardDismissMode="on-drag"
keyExtractor={item => item.image}
renderItem={({ item }) => (
<ChannelItem
channelItemHeader={item.header}
imageSource={item.image}
onPress={() => navigation.navigate(TOPICS_SCREEN)}
/>
)}
/>
</View>
</View>
)
}
export default ChannelsScreen
import React,{useState}来自“React”
从“react native”导入{View,FlatList,StyleSheet}
从“反应本机图像选择器”导入图像选择器
从“../../components”导入{ChannelItem,ModalChannelCard,SearchBar,ScreenHeader}
从“../../dataDraft”导入{data}
从“../routes”导入{TOPICS\u SCREEN}
const styles=StyleSheet.create({
容器:{
弹性:1
},
文本样式:{
尺寸:25,
fontWeight:“粗体”
}
})
const ChannelsScreen=({navigation})=>{
const{container,textStyle}=styles
常量[isModalVisible,setModalVisible]=useState(false)
const[newChannelImage,setNewChannelImage]=useState({
channelImage:null,
加载:错误
})
常量[newChannelTitle,setNewChannelTitle]=useState(“”)
const[userInput,setInput]=useState({
值:“”,
是的
})
const onChangeTexthandler=值=>{
设置输入({
价值
isEmpty:错
})
}
const onPressXButtonHandler=()=>{
设置输入({
值:“”,
是的
})
}
常量HideModelHandler=()=>{
setModalVisible(假)
}
const setChannelImageHandler=({source})=>{
setNewChannelImage({
图片来源:,
加载:正确
})
}
常量rightIconPressHandler=()=>{
setModalVisible(真)
}
const chooseChannelImageHandler=()=>{
常量选项={
标题:“选择图像”,
存储选项:{
skipBackup:没错,
路径:“图像”
}
}
ImagePicker.showImagePicker(选项,响应=>{
console.log('Response=',Response)
if(response.didconcel){
console.log('用户已取消图像选择器')
}else if(response.error){
console.log('ImagePicker错误:',response.error)
}else if(response.customButton){
console.log('用户点击自定义按钮:',response.customButton)
警报(响应。自定义按钮)
}否则{
常量源={uri:response.uri}
setChannelImageHandler(source.uri)
}
})
}
常量newTitleHandler=值=>{
setNewChannelTitle(值)
}
返回(
item.image}
renderItem={({item})=>(
导航。导航(主题屏幕)}
/>
)}
/>
)
}
导出默认通道屏幕
我找到了解决办法。我没有完成此步骤:
注意:如果不完成此步骤,将导致SIGABRT崩溃:
<plist version="1.0">
<dict>
...
<key>NSPhotoLibraryUsageDescription</key>
<string>$(PRODUCT_NAME) would like access to your photo gallery</string>
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) would like to use your camera</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>$(PRODUCT_NAME) would like to save photos to your photo gallery</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) would like to use your microphone (for videos)</string>
</dict>
</plist>
...
NSPhotoLibraryUsageDescription
$(产品名称)希望访问您的照片库
NSCameraUsageDescription
$(产品名称)要使用您的相机吗
NSPhotoLibraryAddUsageDescription
$(产品名称)要将照片保存到您的照片库中
NSM话筒用途说明
$(产品名称)希望使用您的麦克风(用于视频)
日志中是否保留“response”值?调试器不会显示ImagePicker中的任何日志,只是告诉应用程序已关闭:[React DevTools]到RN的连接已关闭。一个应用程序它会发生在Android上吗?