使用 PDFDocument initWithData 获取 'unrecognized selector sent to instance'?

Getting 'unrecognized selector sent to instance' with PDFDocument initWithData?

我在网络视图中使用 jsPDF 生成 PDF,我想在连接的 USB 标签打印机上打印出来。我遇到 'unrecognized selector sent to instance' 错误。

这是来自 Xcode 控制台的错误:

-[__NSCFString bytes]: unrecognized selector sent to instance 0x1089cb868

这里是函数供参考:

- (void) printPDFwithPrinter: (NSString *) printerName andData: (NSData *) data{

    NSLog(@"%@", printerName);

    PDFDocument *pdfDocument = [[PDFDocument alloc] initWithData:data];

    NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];
    [printInfo setTopMargin:0.0];
    [printInfo setBottomMargin:0.0];
    [printInfo setLeftMargin:0.0];
    [printInfo setRightMargin:0.0];
    [printInfo setHorizontalPagination:NSFitPagination];
    [printInfo setVerticalPagination:NSFitPagination];
    [printInfo setPrinter:[NSPrinter printerWithName:printerName]];

    PDFPrintScalingMode scale = kPDFPrintPageScaleDownToFit;

    NSPrintOperation *op = [pdfDocument printOperationForPrintInfo: printInfo scalingMode: scale autoRotate: YES];

    [op setShowsPrintPanel:NO];
    [op setShowsProgressPanel:NO];
    [op runOperation];
}

pdf 数据是 pdf 正文作为字符串的原始输出。 (Docs)

我是 Objective-C 的新手,所以我将 AppBurger 用于我的 Native/webview 桥(在 HTML/JS/CSS 中构建我的应用程序)。

这是我目前的 Xcode 项目: https://github.com/josiaho/AppBurger-Print-Test

如何调试:

  1. 在行上加个断点 PDFDocument *pdfDocument = [[PDFDocument 分配] initWithData:data];

  2. 测试应用程序。当应用遇到断点时,检查 data.

  3. dataNSStringinitWithData: 期望 NSData.

如何修复:

  1. 重命名

- (void) printPDFwithPrinter: (NSString *) printerName andData: (NSData *) data

- (void) printPDFwithPrinter: (NSString *) printerName andString: (NSString *) string

  1. string 转换为 NSData

NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];

  1. 测试应用程序。