[英]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.