在react-native上设置属性时"无法识别的选择器发送到实例"

Ben*_*ter 3 ios reactjs swift react-native

我正在尝试将我的Swift视图与我的React-Native项目相关联.我想出了如何显示它,但现在当我尝试设置属性时,我收到此错误消息:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Switch setMessage:]: unrecognized selector sent to instance 0x7f96b270de70'
Run Code Online (Sandbox Code Playgroud)

在我的react-native代码中,我正在做:

const SwitchNative = requireNativeComponent('Switch', Switch);

class Switch extends Component {
  render() {
    return (
        <SwitchNative message="message will be" style={this.props.style} />
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在我的SwiftBridge中执行此操作:

// SwiftBridge.h

#import "RCTView.h"

@interface SwitchBridge : RCTView

  @property (nonatomic, assign) NSString *message;

@end

// SwiftBridge.m

#import "RCTBridgeModule.h"
#import "RCTViewManager.h"
#import "SwitchBridge.h"

@interface RCT_EXTERN_MODULE(SwitchManager, RCTViewManager)

  RCT_EXPORT_VIEW_PROPERTY(message, NSString)

@end
Run Code Online (Sandbox Code Playgroud)

最后我在Swift课程中有这个Switch.swift:

...
public func setMessage(message: String) {
  NSLog("It's working well");
}
...
Run Code Online (Sandbox Code Playgroud)

不知道为什么它找不到我的setMessage功能.

ide*_*ide 6

React Native试图调用,-[Switch setMessage:]但你已经定义了-[Switch setMessage]没有任何参数.在Swift方法签名中添加一个参数:

public func setMessage(_ message: String)
Run Code Online (Sandbox Code Playgroud)

您可能还需要@objc根据您的Swift版本来注释您的方法.

  • 如果其他人想知道,@ objc(setMessage :) func setMessage(_ message:String) (3认同)