Frage zu Airprint

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Frage zu Airprint

    Hallo Community

    Ich versuche gerade Airprint in meine App einzubringen. Dazu habe ich einen Button in einem ActionSheet. Wenn ich diesen Code hier nehme:

    Code DetailNews.m:

    Quellcode

    1. if (saveEnabled && buttonIdx == 3) {
    2. -(void)printItem :(NSData*)data {
    3. printController = [UIPrintInteractionController sharedPrintController];
    4. if(printController && [UIPrintInteractionController canPrintData:data]) {
    5. printController.delegate = self;
    6. UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    7. printInfo.outputType = UIPrintInfoOutputGeneral;
    8. printInfo.jobName = [NSString stringWithFormat:@""];
    9. printInfo.duplex = UIPrintInfoDuplexLongEdge;
    10. printController.printInfo = printInfo;
    11. printController.showsPageRange = YES;
    12. printController.printingItem = data;
    13. void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
    14. if (!completed && error) {
    15. NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
    16. }
    17. };
    18. [printController presentFromBarButtonItem:self.item animated:YES completionHandler:completionHandler];
    19. }
    20. }
    Alles anzeigen


    Bekomme ich einen Use ofundeclared identifier of "printItem" Der Code im entsprechenden Headerfile sieht so aus:

    Code DetailNews.h:

    Quellcode

    1. SLComposeViewController *mySLComposerSheet;
    2. @interface DetailNews : DetailViewController <UIActionSheetDelegate, MFMailComposeViewControllerDelegate, UIAlertViewDelegate> {
    3. BOOL showSave;
    4. UIActionSheet *loadingActionSheet;
    5. UIPageControl *pageControl;
    6. NSInteger currentPage;
    7. }
    8. @property (readwrite) BOOL showSave;
    9. @property (nonatomic, strong) IBOutlet UIPageControl *pageControl;
    10. @property (nonatomic, assign) NSInteger currentPage;
    11. - (IBAction)changePage:(UIPageControl *)sender;
    12. // add the appropriate delegate
    13. @end
    14. @interface ViewController : UIViewController <UIPrintInteractionControllerDelegate> {
    15. // have an instance varialbe for accessing printInteraction
    16. UIPrintInteractionController *printController;
    17. }
    18. // an imageView from which we will obtain data of an image
    19. @property (nonatomic, strong) IBOutlet UIImageView *imgV;
    20. // a general method which will print the data supplied
    21. -(void)printItem :(NSData*)data;
    Alles anzeigen


    Was mache ich hier falsch?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Thaddel ()

  • Thaddel schrieb:

    Ich hoffe, das beantwortet deine Frage... :)

    Nö, eigentlich nicht: In dem von Dir zitierten Code öffnest Du einen IF-Block und in diesem (!) dann die Methode. Schau Dir doch genau an, was Du gepostet hast ... ist das so beabsichtigt? Ich würde immer

    Quellcode

    1. if (...)
    2. {
    3. [self printItem:...]
    4. }
    5. - (void)printItem:...
    6. {
    7. }

    schreiben. Auf GitHub steht übrigens (noch) nicht der von Die genannte Stand: Nicht gepusht oder ich war einfach blind...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Thaddel schrieb:

    Stimmt, ist noch nicht gepusht. Airprint soll da aber den gleichen Weg wie auch die Funktionen auf den anderen Buttons gehen.

    Öhhmm, und warum ignorierst Du den ersten Teil meiner Antwort? Um es klar zu sagen: Der von Dir gepostete Code ist m. E. Schrott, das referenzierte git-Repository nicht aktuell und nein, ich werde mir jetzt nicht die anderen Methoden anschauen und raten, wie Du den Code vielleicht schreiben wolltest ... Fix doch oben mal den IF-Block, dann sollte es zumindest prinzipiell laufen.

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • So, habe nun versucht, deinen Code umzusetzen, und schaut nun so aus:

    Quellcode

    1. if (buttonIdx == 1 + saveEnabled) {
    2. // Twitter
    3. if(NSClassFromString(@"SLComposeViewController") != nil)
    4. {
    5. mySLComposerSheet = [[SLComposeViewController alloc] init]; //initiate the Social Controller
    6. mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter]; //Tell him with what social plattform to use it, e.g. facebook or twitter
    7. [mySLComposerSheet setInitialText:[NSString stringWithFormat:story.title,mySLComposerSheet.serviceType]]; //the message you want to post
    8. [mySLComposerSheet addURL:[NSURL URLWithString:story.link]];
    9. //for more instance methodes, go here:https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Reference/SLComposeViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40012205
    10. [self presentViewController:mySLComposerSheet animated:YES completion:nil];
    11. } else {
    12. {
    13. TWTweetComposeViewController *tweetSheet =
    14. [[TWTweetComposeViewController alloc] init];
    15. [tweetSheet setInitialText:[NSString stringWithFormat:story.title]];
    16. [tweetSheet addURL:[NSURL URLWithString:story.link]];
    17. [self presentModalViewController:tweetSheet animated:YES];
    18. }
    19. }
    20. }
    21. if (buttonIdx == 2 + saveEnabled) {
    22. // FaceBook
    23. if(NSClassFromString(@"SLComposeViewController") != nil)
    24. {
    25. if([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]);
    26. mySLComposerSheet = [[SLComposeViewController alloc] init]; //initiate the Social Controller
    27. mySLComposerSheet = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook]; //Tell him with what social plattform to use it, e.g. facebook or twitter
    28. [mySLComposerSheet setInitialText:[NSString stringWithFormat:story.title,mySLComposerSheet.serviceType]]; //the message you want to post
    29. [mySLComposerSheet addURL:[NSURL URLWithString:story.link]];
    30. //for more instance methodes, go here:https://developer.apple.com/library/ios/#documentation/NetworkingInternet/Reference/SLComposeViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40012205
    31. [self presentViewController:mySLComposerSheet animated:YES completion:nil];
    32. }
    33. }
    34. if (saveEnabled && buttonIdx == 3)
    35. [self printItem:webview]
    36. {
    37. -(void)printItem:(NSData*)data {
    38. printController = [UIPrintInteractionController sharedPrintController];
    39. if(printController && [UIPrintInteractionController canPrintData:data]) {
    40. printController.delegate = self;
    41. UIPrintInfo *printInfo = [UIPrintInfo printInfo];
    42. printInfo.outputType = UIPrintInfoOutputGeneral;
    43. printInfo.jobName = [NSString stringWithFormat:@""];
    44. printInfo.duplex = UIPrintInfoDuplexLongEdge;
    45. printController.printInfo = printInfo;
    46. printController.showsPageRange = YES;
    47. printController.printingItem = data;
    48. void (^completionHandler)(UIPrintInteractionController *, BOOL, NSError *) = ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
    49. if (!completed && error) {
    50. NSLog(@"FAILED! due to error in domain %@ with error code %u", error.domain, error.code);
    51. }
    52. };
    53. [printController presentFromBarButtonItem:self.item animated:YES completionHandler:completionHandler];
    54. }
    55. }}
    56. if (actionSheet == myMenu) {
    57. myMenu = nil;
    58. }
    59. }
    Alles anzeigen


    Das gibt mir aber noch folgenden ARC semantic issue auf der Zeile 38:

    No visible @interface for 'DetailNews' declares the selector 'printItem:'

    Das Header File hat sich nicht geändert...

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Thaddel ()

  • Thaddel schrieb:

    So, habe nun versucht, deinen Code umzusetzen, ...

    Thaddel, ich habe Dir keinen Code geschrieben (werde ich auch nicht), sondern einen Hinweis gegeben, den Du konsequent ignorierst. Für mich ist hier EOT und als letzten Rat: Lese einmal genau (!), was ich geschrieben habe und versuche, es zu verstehen. Nicht tippen, denken ...

    Mattes
    Diese Seite bleibt aus technischen Gründen unbedruckt.
  • Thaddel schrieb:

    Was mache ich hier falsch?

    Dir ist schon klar, dass es in Objective-C keine verschachtelten Methoden-Implementierungen gibt? ;)

    Mir ist aktuell auch keine vernünftige Programmiersprache bekannt, bei der dies funktionieren könnte. Ok, mag sein, dass dies in Java-Skript möglich ist.

    Schau einfach noch mal in einer entsprechenden Literatur zu Objective-C nach, wie eine Methoden-Implementierung genau aussieht.