Ios 如何在Objective-C中创建新对象并指定属性?

Ios 如何在Objective-C中创建新对象并指定属性?,ios,objective-c,Ios,Objective C,我正在尝试将Objective C SDK与React Native连接起来,但遇到了一些问题。我有一个子类NSObject,我试图设置一些属性值,但我无法让它工作 我已尝试更改头文件和imp文件中的属性,但没有任何差异 PrinterSDK.h(其中包含libPrinterSDK.a) RNPosPrint.m @interface Printer () @property (readwrite) NSString* name; @property (readwrite) NSString*

我正在尝试将Objective C SDK与React Native连接起来,但遇到了一些问题。我有一个子类NSObject,我试图设置一些属性值,但我无法让它工作

我已尝试更改头文件和imp文件中的属性,但没有任何差异

PrinterSDK.h(其中包含libPrinterSDK.a)

RNPosPrint.m

@interface Printer ()
@property (readwrite) NSString* name;
@property (readwrite) NSString* UUIDString;
@end

RCT_EXPORT_METHOD(printTestPaper:(NSString*)name:(NSString*)uuid)
{

  Printer* printer = [[Printer alloc] init];   
  printer.name = name;

}
但我一直面临着二传的问题,因为我不知道什么原因

ExceptionsManager.js:94 Exception '-[Printer setPrinterName:]: unrecognized selector sent to instance 0x13fd25b90' was thrown while invoking printTestPaper on target RNPosPrint with params (
    "Test Printer",
    "XXX-XXX-XXX"
)
您不报告
.h
.m
文件的名称或
.m
中的其他内容–例如
打印机的
@实现
?类
printTestPaper
属于哪个?没有这样的细节,任何人都很难帮助你,你需要帮助别人帮助你

也就是说,以下几点可能对您有所帮助:

  • 打开要写入的属性的
    @interface Printer()
    应该位于
    Printer.m
    文件中–通常不要尝试从类型的实现外部打开对类型属性的访问,这是一种糟糕的设计,可能无法按您希望的方式工作(正如您刚刚发现的)
  • 支持
    @属性
    的代码是由编译器在编译
    @实现
    时生成的,
    @接口
    本身不会生成可执行代码–它们描述了
    @实现
    的可访问部分
  • setter=
    为自动创建的属性setter函数提供不同的名称。虽然将创建一个方法
    以使用点语法设置属性,但仍然使用属性名称,例如,在您的情况下,
    printer.name=…
    即使与
    setter=setPrinterName:
    一起使用,也仍然使用属性名称。您可以使用标准方法语法调用自动创建的方法,在您的案例中由于上述原因而失败
  • 使用
    setter=
    getter=
    是非常高级的功能,您可能永远都不需要使用它们–当您确实需要使用它们时,您就会知道!在那之前尽量避开他们
  • 如果您希望提供一个创建对象并设置属性的方法,那么请在类型的实现中执行此操作。通常的方法是提供一个执行此操作的
    init
    方法,例如,在这种情况下,它可能是
    -initWithName:(NSString*)printerName{…}
    ,或者一个执行分配和设置参数的等效类方法,例如,在这种情况下,它可能是
    +newWithName:(NSString*)printerName{…}

HTH

由于它是来自静态链接库的接口,因此无法扩展或操作。没有编译器的锤炼是不行的

在花了更多的时间学习目标C之后,我知道我在问题中遗漏了一些重要信息。接口来自无法修改的静态链接库。我只需要使用scan方法来解决这个问题,该方法具有返回打印机对象的回调。
ExceptionsManager.js:94 Exception '-[Printer setPrinterName:]: unrecognized selector sent to instance 0x13fd25b90' was thrown while invoking printTestPaper on target RNPosPrint with params (
    "Test Printer",
    "XXX-XXX-XXX"
)