目前我遇到了很大的麻煩,我的ActionSheet。在iPhone上它的偉大工程,但在iPad上只崩潰Swift UIAlertController - > ActionSheet iPad iOS8崩潰
我創建了一個新的項目,只有一個按鈕
import UIKit
extension ViewController : UIActionSheetDelegate {
func actionSheet(actionSheet: UIActionSheet, didDismissWithButtonIndex buttonIndex: Int) {
if actionSheet.tag == 0 {
if buttonIndex == 1 {
// doing something for "product page"
} else if (buttonIndex == 2) {
// doing something for "video"
}
}
}
}
class ViewController: UIViewController, UIActionSheetDelegate {
@IBAction func test(sender: AnyObject) {
let systemVersion: NSInteger = (UIDevice.currentDevice().systemVersion as NSString).integerValue
if systemVersion < 8 {
// iOS7:
let action:UIActionSheet = UIActionSheet(title: "Change Map Type", delegate: self, cancelButtonTitle: "Back", destructiveButtonTitle: nil, otherButtonTitles: "Product Page", "Video")
action.tag = 0
action.showInView(self.view)
} else {
// iOS8:
let alertController: UIAlertController = UIAlertController(title: "Change Map Type", message: nil, preferredStyle: UIAlertControllerStyle.ActionSheet)
let cancelAction: UIAlertAction = UIAlertAction(title: "Back", style: UIAlertActionStyle.Cancel, handler: nil)
let button1action: UIAlertAction = UIAlertAction(title: "Product Page", style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) ->() in
// doing something for "product page"
})
let button2action: UIAlertAction = UIAlertAction(title: "Video", style: UIAlertActionStyle.Default, handler: { (action: UIAlertAction!) ->() in
// doing something for "video"
})
alertController.addAction(cancelAction)
alertController.addAction(button1action)
alertController.addAction(button2action)
self.presentViewController(alertController, animated: true, completion: nil)
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
}
正如我在它工作的iphone說,但如果我點擊iPad上的按鈕應用崩潰與
2014年9月25日14:54:52.784測試[9541:1970048] *終止應用程序由於 未捕獲的異常 'NSGenericException',原因:「你的應用程序已 呈現的UIAlertController() 風格UIAlertControllerStyleActionSheet。具有這種風格的UIAlertController的 的modalPresentationStyle是UIModalPresentationPopover。您必須通過 控制器的popoverPresentationController爲此彈出窗口提供位置信息。您必須提供 sourceView和sourceRect或barButtonItem。如果此信息是 當您顯示警報控制器時未知,則可以在 中提供它的UIPopoverPresentationControllerDelegate方法 -prepareForPopoverPresentation。 *第一擲調用堆棧:(0的CoreFoundation 0x00613df6 exceptionPreprocess + 182 1 libobjc.A.dylib
0x01fdaa97 objc_exception_throw + 44 2的UIKit
0x0164da37 - [UIPopoverPresentationController presentationTransitionWillBegin] + 3086 3的UIKit
0x00f54f75 __71- [UIPresentationController _initViewHierarchyForPresentationSuperview:] _ block_invoke + 1666 4的UIKit 0x00f53554 __56- [UIPresentationController runTransitionForCurrentState] _block_invoke + 226 5的UIKit
0x00f8721b __40 + [UIViewController中_scheduleTransition:] _ block_invoke + 18 6的UIKit 0x00e4d62e ___afterCACommitHandler_block_invoke + 15 7的UIKit 0x00e4d5d9 _applyBlockToCFArrayCopiedToStack + 415 8的UIKit
0x00e4d3ee _afterCACommitHandler + 545 9的CoreFoundation
0x00536fbe __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION + 30 10的CoreFoundation 0x00536f00 __CFRunLoopDoObservers + 400 11的CoreFoundation 0x0052c93a __CFRunLoopRun + 1226 12的CoreFoundation 0x0052c1ab CFRunLoopRunSpecific + 443 13 CoreFoundation
0x0052bfdb CFRunLoopRunInMode + 123 14 GraphicsServices
0x0438424f GSEventRunModal + 192 15 GraphicsServices
0x0438408c GSEventRun + 104 16的UIKit
0x00e23e16 UIApplicationMain + 1526 17試驗
0x00085e9e top_level_code + 78 18測試
0x00085edb主+ 43 19 libdyld.dylib
0x0273eac9啓動+ 1 20 ???
00000001爲0x0 + 1)的libC++ abi.dylib:與未捕獲 異常類型NSException
項目的終止可以在https://www.dropbox.com/s/54jqd8nsc67ll5g/test.zip?dl=0找到用於下載和嘗試。
該職位與我的回答非常相似...除了例外。 http://stackoverflow.com/questions/26037657/swift-uiactionsheet-crashes-on-ipad – holex 2014-09-25 13:22:17
是的,但它仍然崩潰 – 2014-09-25 13:23:18
我會盡快更新我的答案... – holex 2014-09-25 13:24:18