【问题标题】:ios/iphone - [NSNull dataUsingEncoding:]: unrecognized selector sent to instanceios/iphone - [NSNull dataUsingEncoding:]: 无法识别的选择器发送到实例
【发布时间】:2014-03-21 08:44:10
【问题描述】:

有人可以帮助我说明的错误是什么吗?

[NSNull dataUsingEncoding:]: unrecognized selector sent to instance

我被 iOS 应用程序的打印机插件卡住了。

一段时间以来,我一直在努力让这个应用程序正常工作......观看的代码可能有助于找到错误......

导入“APPPrinter.h”

@interface APPPrinter (Private)

- (UIPrintInteractionController*) getPrintController;

- (UIPrintInteractionController*) adjustSettingsForPrintController:(UIPrintInteractionController*)controller;

- (void) loadContent:(NSString*)content intoPrintController:(UIPrintInteractionController*)controller;

- (void) informAboutResult:(int)code callbackId:(NSString*)callbackId;

- (BOOL) isPrintServiceAvailable;

@end


@implementation APPPrinter

// Is printing available.

- (void) isServiceAvailable:(CDVInvokedUrlCommand*)command
{
CDVPluginResult* pluginResult;

pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK
                                   messageAsBool:[self isPrintServiceAvailable]];

[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];

}

- (void) print:(CDVInvokedUrlCommand*)command
{
if (![self isPrintServiceAvailable])
{
    return;
}

NSArray*  arguments  = [command arguments];
NSString* content    = [arguments objectAtIndex:0];

UIPrintInteractionController* controller = [self getPrintController];

[self adjustSettingsForPrintController:controller];
[self loadContent:content intoPrintController:controller];

[self openPrintController:controller];

[self commandDelegate];

}

- (UIPrintInteractionController*) getPrintController
{
return [UIPrintInteractionController sharedPrintController];

}

- (UIPrintInteractionController*) adjustSettingsForPrintController:(UIPrintInteractionController*)controller
{
UIPrintInfo* printInfo    = [UIPrintInfo printInfo];
printInfo.outputType      = UIPrintInfoOutputGeneral;
controller.printInfo      = printInfo;
controller.showsPageRange = YES;

return controller;

}

- (void) loadContent:(NSString*)content intoPrintController:(UIPrintInteractionController*)controller
{
// Set the base URL to be the www directory.
NSURL *basEURL = [[NSBundle mainBundle] URLForResource:@"Login" withExtension:@"html"];

// Load page into a webview and use its formatter to print the page
UIWebView* webPage    = [[UIWebView alloc] init];

[webPage loadHTMLString:content baseURL:basEURL];


UIViewPrintFormatter* formatter = [webPage viewPrintFormatter];

controller.printFormatter = formatter;
controller.showsPageRange = YES;
}
- (void) openPrintController:(UIPrintInteractionController*)controller
{
[self.commandDelegate runInBackground:^
{
[controller presentAnimated:YES completionHandler:NULL];

}];

[self performSelectorOnMainThread:@selector(openPrintController:) withObject:nil waitUntilDone:NO];
}

- (BOOL) isPrintServiceAvailable
{
Class printController = NSClassFromString(@"UIPrintInteractionController");

if (printController)
{
    UIPrintInteractionController* controller = [UIPrintInteractionController sharedPrintController];

    return (controller != nil) && [UIPrintInteractionController isPrintingAvailable];
}

return NO;
}

@end

任何关于创建和让打印插件在我的应用程序中运行的帮助/链接也很棒。

【问题讨论】:

  • 能否提供更多代码来分析问题?
  • 我已经编辑了问题并粘贴了代码......希望这可能会有所帮助

标签: ios iphone plugins


【解决方案1】:

这意味着一条消息“dataUsingEncoding:”被发送到 NSNull 的一个实例。

在你的程序某处有一个对象,你显然认为它是一个 NSString*,但实际上它是一个 NSNull*。 NSNull 对象在数组和字典中用作占位符来表示“没有值”,因为您不能在数组和字典中存储 nil。

在Xcode中,点击“Breakpoints”,点击“+”,添加一个“Exception breakpoint”。再次运行您的程序。这一次它将在调试器中停止在尝试调用 dataUsingEncoding 的代码上:找出对象来自哪里并修复它。

【讨论】:

  • 我试过你提到的...但是我得到地址 0x296c88a: pushl %ebp, 虽然它调试...我是这个插件概念的新手...如果它有点抱歉困扰,但我无法帮助自己找到解决方案
猜你喜欢
  • 2011-08-23
  • 2023-03-09
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
  • 2015-12-24
  • 1970-01-01
  • 2013-09-24
  • 1970-01-01
相关资源
最近更新 更多