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

时间:2016-10-10 21:57:29

标签: ios swift reactjs react-native

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

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Switch setMessage:]: unrecognized selector sent to instance 0x7f96b270de70'

在我的本机代码中,我正在做:

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

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

然后在我的 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

最后我在Swift课程中Switch.swift

...
public func setMessage(message: String) {
  NSLog("It's working well");
}
...

不确定为什么找不到我的setMessage功能。

3 个答案:

答案 0 :(得分:5)

React Native正在尝试调用-[Switch setMessage:],但您已定义-[Switch setMessage]而没有任何参数。在Swift方法签名中添加一个参数:

public func setMessage(_ message: String)

您可能还需要使用@objc注释您的方法,具体取决于您的Swift版本。

答案 1 :(得分:0)

正确的语法现在是swift,

@objc(setMessage:)
public func setMessage(message: String) {
  NSLog("It's working well");
}

这是Swift的变化&gt; 3.2,Mac High Sierra和React Native&gt; = 0.43

答案 2 :(得分:0)

对于任何可能正在搜索从 React-Native 传递对象数组的人(我在这样做时遇到了这个问题):

YourView.h

@interface YourView : RCTView

@property (nonatomic, assign) NSMutableArray *markers;

@end

YourView.m

...
RCT_CUSTOM_VIEW_PROPERTY(markers, NSMutableArray, YourView)
{
  [view setMarkers:json];
}

YourView.swift

@objc(setMarkers:)
public func setMarkers(json: NSMutableArray) {
    
}