2015-02-16 13 views
7

Wenn ein UIActivityViewController auf dem iPhone in dieser App aufgerufen wird, funktioniert es perfekt, aber beim Aufruf auf einem iPad stürzt die App ab. Unten ist der Code, den ich verwendet:IOS 8 iPad App stürzt ab, wenn UIActivityViewController aufgerufen wird

func shareButtonPress() { 

    //when the share button is pressed, default share phrase is added, cropped image of highscore is added 

    var sharingItems = [AnyObject]() 

    var shareButtonHighscore = NSUserDefaults.standardUserDefaults().objectForKey("highscore") as Int! 

    sharingItems.append("Just hit \(shareButtonHighscore)! Beat it! #Swath") 

    UIGraphicsBeginImageContextWithOptions(UIScreen.mainScreen().bounds.size, false, 0); 
    self.view.drawViewHierarchyInRect(view.bounds, afterScreenUpdates: true) 
    var image:UIImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    sharingItems.append(image) 

    let activityViewController = UIActivityViewController(activityItems: sharingItems, applicationActivities: nil) 

    var barButtonItem: UIBarButtonItem! = UIBarButtonItem() 

    activityViewController.excludedActivityTypes = [UIActivityTypeCopyToPasteboard,UIActivityTypeAirDrop,UIActivityTypeAddToReadingList,UIActivityTypeAssignToContact,UIActivityTypePostToTencentWeibo,UIActivityTypePostToVimeo,UIActivityTypePrint,UIActivityTypeSaveToCameraRoll,UIActivityTypePostToWeibo] 

    self.presentViewController(activityViewController, animated: true, completion: nil) 

} 

Wie Sie sehen, ich bin Programmierung in Swift, im SpriteKit Framework und ich verstehe nicht, warum die App abstürzt.

Ich erhalte diese Fehlermeldung:

Terminating app due to uncaught exception 'NSGenericException', reason: 'UIPopoverPresentationController (<_UIAlertControllerActionSheetRegularPresentationController: 0x7fc7a874bd90>) should have a non-nil sourceView or barButtonItem set before the presentation occurs.' 

Was kann ich tun, um dieses Problem zu beheben?

+0

> Was kann ich tun, um dieses Problem zu beheben? - 1. Lesen Sie die Fehlermeldung. 2. Überprüfen Sie die Dokumentation auf 'UIPopoverController' – Mundi

Antwort

26

Vor dem UIActivityViewController präsentiert, fügen Sie in diese Codezeile:

activityViewController.popoverPresentationController?.sourceView = self.view 

auf diese Weise weiß der view-Controller, in dem Rahmen des GameViewController in erscheinen

+0

verwandte Antwort mit mehr Details. http://stackoverflow.com/a/34595918 – Suragch

3

Wenn Sie den Fehler es sagt, lesen Sie, wie es zu beheben, müssen Sie die barButtonItem oder Sourceview setzen, von dem aus die popover zu präsentieren, in Ihrem Fall:

func shareButtonPress(pressedButton: UIBarButtonItem) { 

    ... 

    activityViewController.popoverPresentationController.barButtonItem = pressedButton 

    self.presentViewController(activityViewController, animated: true, completion: nil) 
} 
+0

Jetzt bekomme ich diesen Fehler:' [MyGame.GameViewController shareButtonPress]: unerkannter Selektor an Instanz 0x15f8c610'' gesendet – tdh

+0

Was kann ich tun, um dies zu korrigieren? Ich kann UIBarButtonItem nicht durch den Namen der tatsächlichen Schaltfläche ersetzen, da die eigentliche Schaltfläche in GameScene definiert ist. – tdh

+0

Wie fügen Sie das Ziel dem UIBarButtonItem hinzu? – Steve

1

Es gibt t. Wo, die Aktion kam von einem UIBarButtonitem oder UIButton, das eine UIView ist.

func shareButtonPress() { 

    ... 

    if let actv = activityViewController.popoverPresentationController { 
     actv.barButtonItem = someBarButton // if it is a UIBarButtonItem 

     // Or if it is a view you can get the view rect 
     actv.sourceView = someView 
     // actv.sourceRect = someView.frame // you can also specify the CGRect 
    } 

    self.presentViewController(activityViewController, animated: true, completion: nil) 
} 

Sie müssen einen Absender auf Ihre Funktion wie func shareButtonPress(sender: UIBarButtonItem) oder func shareButtonPress(sender: UIButton)

1

ich für Swift 3 hinzugefügt hinzufügen können:

activityViewController.popoverPresentationController?.sourceView = self.view 

mein Problem behoben.

Verwandte Themen