我只是将React-native从0.28升级到0.30,并收到此错误:
“Native模块不能为null”。
问题似乎与行/包有关:
var PushNotification = require('react-native-push-notification');
答案 0 :(得分:17)
红框投诉react-native在<unkown>
中找不到符号PushNotificationIOS.js line 18
。
当您无法将第三个lib链接到目标时,通常会发生这种情况,导致NativeModules在尝试时找不到任何内容。
要解决此问题,请使用Project Navigator - &gt;目标 - &gt;一般 - &gt;链接的框架和库,确保somelib.a
在那里。
在您的情况下,请关注ios install guides和react-native doc
答案 1 :(得分:6)
有时候,如果你有另一个react-native packager已经在运行不同的应用程序。你可能会看到这个问题。
特别是如果react-native版本相同且之前启动的应用程序需要当前应用程序中不可用的本机模块。
在这些情况下,你可以杀死react packager终端并重启它,问题应该消失。
此外,如果它是相同的应用程序,您刚刚升级。确保它已正确链接。如果没有再次调用react-native链接。
答案 2 :(得分:5)
就我而言,在/ ios目录中运行$ pod install
可以解决问题!
答案 3 :(得分:2)
我认为这与如何导出和导入模块有关。 确保每个相应的
如果您导出模块module.exports = moduleName;
,则应使用var moduleName = require('moduleName');
如果使用export default moduleName;
导出模块。您应该使用import ModuleName from './ModuleName;
检查所有出口和进口。
答案 4 :(得分:2)
删除node_modules中的react-native-push-notification
运行npm install react-native-push-notification@3.1.3
答案 5 :(得分:2)
library(shiny)
library(bsplus)
# global button counter
cpt <- 0
# function to create a new slider input
newinput <- function(ID, tag){
div(id=ID,
bs_append(
tag = tag,
title_side = ID,
content_side = NULL,
content_main = sliderInput( inputId = paste0("slider_",ID),
label = paste0("slider_",ID),
value = 0,
min=0,
max=10)
)
)
}
# UI
ui <- shinyUI(fluidPage(
titlePanel("bs_append and insertUI"),
sidebarPanel(
fluidRow(
actionButton("add", "+"),
mytag <- bs_accordion_sidebar(id = "accordion",
spec_side = c(width = 4, offset = 0),
spec_main = c(width = 8, offset = 0)),
div(id = "placeholder"),
actionButton("delete", "-")
)
),
mainPanel(
plotOutput('show_inputs')
),
use_bs_accordion_sidebar()
))
# SERVER
server <- shinyServer(function(input, output) {
# reactive function to collect all input values
AllInputs <- reactive({
myvalues <- sapply(names(input)[!names(input) %in% c("add", "delete")], function(x) input[[x]])
print(myvalues)
return(myvalues)
})
# simple output barplot
output$show_inputs <- renderPlot({
barplot(AllInputs())
})
# take a dependency on 'add' button
observeEvent(input$add, {
cpt <<- cpt + 1
insertUI(
selector ='#placeholder',
where = "beforeEnd",
ui = newinput(ID = cpt,
tag = mytag)
)
})
# take a dependency on 'delete' button
observeEvent(input$delete, {
removeUI(selector = paste0('#', cpt))
cpt <<- cpt - 1
})
})
shinyApp(ui, server)
npm i @react-native-community/push-notification-ios
cd ios && pod install
这是我奋斗几个小时后解决的方法。
答案 6 :(得分:1)
请使用react native的ios推送通知包,而不是native的。
https://github.com/react-native-community/react-native-push-notification-ios
从您的库中删除RCTPushNotification项目,并尝试使用react-native-community的ios推送通知。您需要按照指南进行操作。 (xcode和链接有一些区别。)
答案 7 :(得分:1)
我的问题有相同的症状,但根本原因却大不相同。我在两个不同的Xcode实例中打开了两个React Native项目。我的Metro捆绑器仍从项目A运行,并导致在模拟器中运行项目B的问题。
解决方法:关闭Xcode生成的运行Metro Bundler的旧终端窗口,然后重新运行项目。
答案 8 :(得分:1)
有时候,当您通过npm
安装不同的库时,可能会遇到问题。所有需要做的是:转到项目的ios文件夹,然后运行pod install
。这将有助于避免此错误,这也是原因之一。
答案 9 :(得分:0)
如果它可以帮助某人。 手动链接库 ios的node_modules / react-native / libraries / PushNotificationIOS / RCTPushNotification.xcodeproj https://facebook.github.io/react-native/docs/linking-libraries-ios#manual-linking
是手动链接所指的位置。不反应本地推送通知
答案 10 :(得分:0)
尝试命令
$pod install
在YourProject/ios
中。它对我有用。
希望有帮助吗?
答案 11 :(得分:0)
1-在iOS中,消息为“本地模块不能为空”
2-在Android消息中,'null不是评估RNFSManager等的对象'
含义相同,解决方案不同,在两种情况下,您都需要手动链接本机库。
iOS解决方案在iOS目录中pod install
运行,然后react-native run-ios
重新运行该应用。
Android的解决方案是react-native link react-native-fs
,然后react-native run-android
重新运行该应用程序。
注意:在android中最好是再次在android studio中打开项目,以免带来任何不便。
答案 12 :(得分:-1)
尝试
react-native link react-native-push-notification
cd ios
pod install