2016-01-21 2 views
1

Я использую экран запуска в Xcode, чтобы сделать заставку для моего приложения.Проблема с заставкой iPhone

Существует только изображение на экране всплеска, ни один API не попадает в фоновом режиме.
Слишком долго на экране заставки, на котором время, превышающее 20 секунд и приложение, разбилось там, я также проверил его в журнале устройств.

Иногда он падает, и иногда он срабатывает, но это всегда занимает слишком много времени.
Я не могу перейти к следующему экрану оттуда. И он показывает белый экран перед экраном всплеска только для iPhone 6 Plus (без белого экрана на других устройствах).

Как выйти из проблемы с экраном белого экрана для iPhone 6 Plus и решить проблему с длительным периодом заставки?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    { 

     // Override point for customization after application launch. 
     // self.prepareForContact() 
     if let a: AnyObject = (NSUserDefaults.standardUserDefaults().objectForKey("isFirstTime")) 
     { 
      if let a: AnyObject = (NSUserDefaults.standardUserDefaults().objectForKey("userid")) 
      { 
       self.createAppFromHomepage() 
      } 
     } 
     else 
     { 
      self.createAppFromWelcomeScreen() 
     } 

     isAllImageDownloading = false 
     // Save this data to hit friend service on login on every launch... 
     NSUserDefaults.standardUserDefaults().setObject("1", forKey: "hitFriendService") 

     let credentialsProvider = AWSCognitoCredentialsProvider(regionType: CognitoRegionType, identityPoolId: CognitoIdentityPoolID) 
     let configuration = AWSServiceConfiguration(region: DefaultServiceRegionType, credentialsProvider: credentialsProvider) 
     AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 

     //print(credentialsProvider.secretKey) 

     if let event_id: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("eventId") 
     { 
      self.getEventDescription() 
      self.uploadEventRemainingImages() 
     } 


     let session1 = AVAudioSession.sharedInstance() 
     session1.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: AVAudioSessionCategoryOptions.MixWithOthers|AVAudioSessionCategoryOptions.DefaultToSpeaker|AVAudioSessionCategoryOptions.AllowBluetooth, error: nil) 
     session1.setActive(true, error: nil) 
     UIApplication.sharedApplication().beginReceivingRemoteControlEvents() 


     let nsDocumentDirectory = NSSearchPathDirectory.DocumentDirectory 
     let nsUserDomainMask = NSSearchPathDomainMask.UserDomainMask 
     if let paths = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true) 
     { 
     if let dirPath = paths[0] as? String 
     { 
      self.excludeFromBackupToICloud(dirPath) 
     } 
     } 

     if application.respondsToSelector("registerUserNotificationSettings:") { 

      let types:UIUserNotificationType = (.Alert | .Badge | .Sound) 
      let settings:UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil) 

      application.registerUserNotificationSettings(settings) 
      application.registerForRemoteNotifications() 
     } 
     else 
     { 
      // Register for Push Notifications before iOS 8 
      // application.registerForRemoteNotificationTypes(.Alert | .Badge | .Sound) 
     } 

     if let isFirstTime: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("isFirstTime") 
     { 
     } 
     else 
     { 
      UIApplication.sharedApplication().applicationIconBadgeNumber = 0 
      // NSUserDefaults.standardUserDefaults().setObject("1", forKey: "isFirstTime") 
     } 
     return true 
    } 
+1

, пожалуйста, поделитесь кодом appdelegate –

+0

Вы упоминаете «нет фонового API», что на самом деле было бы хорошей вещью, чтобы поддерживать пользовательский интерфейс отзывчивым. Существует несколько вызовов, которые могут превышать 20 секунд: 'createAppFromHomepage',' AWSServiceManager', 'uploadEventRemainingImages', ... – SwiftArchitect

+0

AWSService manager предназначен только для настройки и других методов, таких как createAppFromhomepage и uploadEventRemainingImages. Эти два вызова, только когда я зарегистрировался один раз в приложении, в то время как моя проблема связана с сбоем приложения на заставке. Я не могу добраться до экрана входа в систему, поэтому эти два метода не влияют на него. – Som

ответ

0

Вы убиты сторожевым псом. Ваше приложение не падает с ошибкой.

Исследовать

Профиль приложение под Instruments: Вы увидите сразу, что так долго.

Fix

Разрешить didFinishLaunchingWithOptions вернуться немедленно. Фактор всю тяжелую работу в отдельный метод, который можно ссылаться как так:

Swift

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    self.performSelectorOnMainThread("didFinishLaunching", withObject: nil, waitUntilDone: false) 
    return true 
} 

и делать тяжелую работу после возвращения (следующий цикл событий)

func didFinishLaunching() { 
    // time consuming work goes here 
} 

Objective-C

[self performSelectorOnMainThread:@selector(didFinishLaunching) 
         withObject:nil 
        waitUntilDone:NO]; 

- (void) didFinishLaunching { 
    // time consuming work goes here 
} 
Смежные вопросы