AirPrint连接拒绝错误

时间:2012-04-15 14:53:41

标签: objective-c ios5 printing error-handling airprint

在我的iOS应用程序中,我有以下代码用于AirPrinting一个简单的NSString。

#pragma mark - Print
-(IBAction)print:(id)sender {

    UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
    pic.delegate = self;

    UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    printInfo.outputType = UIPrintInfoOutputGeneral;
    printInfo.jobName = @"Message";
    pic.printInfo = printInfo;

    UISimpleTextPrintFormatter *textFormatter = [[UISimpleTextPrintFormatter alloc]initWithText:self.Message.text];
    textFormatter.startPage = 0;
    textFormatter.contentInsets = UIEdgeInsetsMake(72.0, 72.0, 72.0, 72.0); // 1 inch margins
    textFormatter.maximumContentWidth = 6 * 72.0;
    pic.printFormatter = textFormatter;
    pic.showsPageRange = YES;

    void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) =
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
        if (!completed && error) {
            NSLog(@"Printing could not complete because of error: %@", error);
        }
    };
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        [pic presentFromBarButtonItem:sender animated:YES completionHandler:completionHandler];
    } else {
        [pic presentAnimated:YES completionHandler:completionHandler];
    }
}

当我运行我的项目(测试它)时,当我点击UIPrintInteractionController上的“Print”时,这是我在输出调试器窗口中得到的错误:

Simulated\032InkJet\032@\032USER\032NAME\032iMac._ipp._tcp.local.: startJob: Unable to connect to printd: Connection refused

我使用打印模拟器在iOS 5.1模拟器中收到此错误。 为什么我会收到此错误?我感觉这与我使用打印模拟器的方式有关。

任何帮助都表示赞赏,并且作为附注,有没有人知道如何从iPad上的普通UIButton而不是BarButtonItem显示UIPrintInteraction控制器?

编辑:应该注意的是,在iOS 6.0 +中使用Share表时会自动设置AirPrint。

3 个答案:

答案 0 :(得分:11)

我有完全相同的问题,基本上mincemeat的答案解决了这个问题。但是我确实必须首先跳过几个篮球。最终它是某种文件权限问题。

我做了以下事项(注意,需要管理员访问权限):

  1. 打开终端并导航到文件夹/ p​​rivate / var / tmp /

  2. 输入'whoami'以查看您的确切用户名。

  3. 假设您的用户名是'dogtest'。输入'sudo chown dogtest:admin printd'。你会得到一个警告,基本上要求你确保你知道你在做什么。

  4. 输入您的管理员密码并按Enter键。

  5. 现在您拥有了printd文件的所有权,可以随心所欲地使用它。通过键入“mv printd printd-ren”将文件重命名为其他内容。

  6. 打开iOS模拟器和打印机模拟器。

  7. 在iOS模拟器中打开Safari并转到任何网页。

  8. 点击底部中心的“分享”按钮,然后选择“打印”。

  9. 按照提示完成打印。您应该在Printer Simulator日志窗口中看到更多活动。此时,使用您的帐户权限重新创建printd文件(这很好)。

  10. 退出iOS模拟器和打印机模拟器。

  11. 在模拟器中重新运行iOS应用程序,然后重新打开打印机模拟器。

  12. 现在,您应该可以从应用程序模拟Air Print,打印输出将以PDF格式预览打开。

  13. 我希望这能为您解决问题,或者至少指出您正确的方向。祝你好运。

答案 1 :(得分:3)

尝试删除

/私人/ var / tmp中/ printd

答案 2 :(得分:2)

我让打印机模拟器停止工作,并没有给我任何错误。我尝试了不同的模拟器,重置它们,重新启动计算机,如上所述杀死printd,以及其他事情。

最后,为我修复的是改变我的网络连接:当时,我有wifi和连接到我的macbook的以太网电缆(通过霹雳) - wifi + ethernet连接到同一网络。我弹出以太网线,然后立即重新开始工作。

感谢Apple,我可以在哪里获得20分钟的时间:)