繁体   English   中英

如何在Objective-C中创建一个新对象并分配属性?

[英]How to create a new object and assign properties in Objective-C?

我试图用React Native桥接Objective C SDK,但遇到了一些麻烦。 我有一个NSObject的子类,我试图设置一些属性值,但无法使其正常工作。

我试图更改标头和imp文件中的属性,没有任何区别。

PrinterSDK.h(具有libPrinterSDK.a)

@interface Printer : NSObject

@property (nonatomic, readonly) NSString* name;
@property (nonatomic, readonly) NSString* UUIDString;

@end

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如- @implementationPrinter printTestPaper属于什么? 没有这样的细节,任何人都很难帮助您,您需要帮助别人来帮助您。

那说了一些点可以帮助您:

  • 打开可写属性的@interface Printer ()应该位于Printer.m文件中–通常,请勿尝试从类型的实现外部打开对类型属性的访问,这既是错误的设计,也是可能无法如您所愿(正如您刚刚发现的那样)。
  • 支持的代码@property由编译器时,编译生成的@implementation@interface他们描述的访问部件-的本身不产生可执行代码@implementation
  • setter=<name>为自动创建的属性设置器功能提供了另一个名称。 虽然将创建方法<name>来使用点语法设置属性,但仍使用属性名称,例如,在您的情况下,即使setter=setPrinterName:仍使用printer.name = ... 您可以使用标准方法语法调用自动创建的方法,由于上述原因,该方法在您的情况下失败。
  • 使用setter=<name>getter=<name>是真正的高级功能,您可能永远不需要使用它们-当您确实需要使用它们时,您就会知道! 直到那时都避免它们。
  • 如果您希望提供一种创建对象并设置属性的方法,请在类型的实现中执行此操作。 这样做的通常方法是提供一个执行此操作的init方法,例如,在这种情况下,它可能是- initWithName:(NSString *)printerName { ... }或等效的类方法,该方法执行分配并设置参数,例如,在这种情况下,可能为+ newWithName:(NSString *)printerName { ... }

HTH

由于它是静态链接库的接口,因此根本无法扩展或操纵。 并非没有对编译器进行调整。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM