2015-11-03 2 views
-3

Я получаю сообщение об ошибке от Xcode заявив:IOS App Сбои после изменения от iPhone до Юниверсал:

2015-11-03 12:25:04.833 New Application[1122:1104042] *** Terminating app due to uncaught exception 'NSGenericException', reason: 'Your application has presented a UIAlertController (<UIAlertController: 0x14f68cb50>) of style UIAlertControllerStyleActionSheet. The modalPresentationStyle of a UIAlertController with this style is UIModalPresentationPopover. You must provide location information for this popover through the alert controller's popoverPresentationController. You must provide either a sourceView and sourceRect or a barButtonItem. If this information is not known when you present the alert controller, you may provide it in the UIPopoverPresentationControllerDelegate method -prepareForPopoverPresentation.' 
*** First throw call stack: 
(0x182e1cf5c 0x19799ff80 0x188c50068 0x1886c0254 0x1886be384 0x18861c844 0x188628de4 0x1883651e4 0x182dd3c30 0x182dd19d4 0x182dd1e04 0x182d00dc0 0x18dca8088 0x1883daf60 0x1000f0d00 0x1981be8b8) 
libc++abi.dylib: terminating with uncaught exception of type NSException 
(lldb) 

на линии:

class AppDelegate: UIResponder, UIApplicationDelegate { 

в:

// 
// AppDelegate.swift 
// FlappyBird 
// 
// Created by Nate Murray on 6/2/14. 
// Copyright (c) 2014 Fullstack.io. All rights reserved. 
// 

import UIKit 

@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
     // Override point for customization after application launch. 
     return true 
    } 

    func applicationWillResignActive(application: UIApplication) { 
     // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
     // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
    } 

    func applicationDidEnterBackground(application: UIApplication) { 
     // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 
     // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 
    } 

    func applicationWillEnterForeground(application: UIApplication) { 
     // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 
    } 

    func applicationDidBecomeActive(application: UIApplication) { 
     // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
    } 

    func applicationWillTerminate(application: UIApplication) { 
     // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 
    } 


} 

найти здесь:

Мой источник: https://github.com/androiddeveloperfl/SADiver

Первоисточник:

https://github.com/fullstackio/FlappySwift/blob/master/FlappyBird/AppDelegate.swift

Любые предложения/ответы/решения высоко ценятся.

+1

Вы прочитали ошибку? Вы искали ключевые части ошибки? – rmaddy

+0

@shim - да, он сработает, как только он будет запущен - проект был передан мне в этом состоянии (предыдущий разработчик больше не работает с нами), что я должен продолжать, это текущее состояние кода/проекта и github link - вот и все:/ – AndroidAndroidAndroid

+0

yes - @rmaddy - У меня есть - вы хотите снять скриншот из многих статей SO, которые у меня есть, которые я сейчас читал, чтобы сузить вопрос о том, как решить эту проблему? Я прочитал и обыскал немало, но мне все равно нужно обратиться к сообществу. (извинения @rmaddy) – AndroidAndroidAndroid

ответ

0

Приложение сбой, когда вы пытаетесь представить лист действий в вашем SplashViewController. На iPad в листе действий есть небольшая стрелка, указывающая на элемент управления или просмотр, который вызвал всплывающее окно, и вам нужно указать, где указать. В вашем коде в функции alert(title: String, message: String) вы можете сделать что-то вроде:

alertController.popoverPresentationController?.sourceView = self.view 
    alertController.popoverPresentationController?.sourceRect = CGRectMake(self.view.bounds.size.width/2.0, self.view.bounds.size.height/2.0, 1.0, 1.0) 

, который поместит стрелку в центр обзора. Это, вероятно, выглядит странно, хотя, так что вы также можете захотеть изменить стиль UIAlertController из листа действий по тревоге:

let alertController = UIAlertController(title: title, message: message, preferredStyle: .Alert) 

, который выглядит лучше меня. Вам тогда не нужно иметь строки о popoverPresentationController

0

Когда вы вызываете лист действий на iPad, это popover. Это означает, что вы должны указать, куда будет указываться стрелка popover. Получите контрольный презентационный контроллер предупреждения и передайте ему эту информацию при представлении предупреждения.

Вот пример:

let alert = UIAlertController(title: nil, message: nil, preferredStyle: .ActionSheet) 
    func handler(act:UIAlertAction!) { 
     print("User tapped \(act.title)") 
    } 
    alert.addAction(UIAlertAction(title: "Cancel", style: .Cancel, handler: handler)) 
    alert.addAction(UIAlertAction(title: "Hey", style: .Default, handler: handler)) 
    alert.addAction(UIAlertAction(title: "Ho", style: .Default, handler: handler)) 
    alert.addAction(UIAlertAction(title: "Hey Nonny No", style: .Default, handler: handler)) 
    self.presentViewController(alert, animated: true, completion: nil) 
    // if we do no more than that, we'll crash on iPad 
    // here's how to fix that: 
    if let pop = alert.popoverPresentationController { 
     let b = sender as! UIBarButtonItem 
     pop.barButtonItem = b // or set sourceView and sourceRect 
    } 
+0

Я ценю ваш пример - я нашел что-то подобное при исследовании решения этой проблемы. В этом случае я ищу какой-либо код, относящийся к popovers в исходном исходном коде, который предыдущий dev forked, который делает infact, запущенный на iPad, для подсказки относительно того, как я могу сделать то же самое в моем, но я не вижу ссылок при поиске всего проекта - любая идея, почему это может быть? Оригинал: (работает на IPAD) https://github.com/fullstackio/FlappySwift Mine: (не работает на IPad) https://github.com/androiddeveloperfl/SADiver – AndroidAndroidAndroid