簡體   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