[英]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
如- @implementation
的Printer
? 类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.