2016-01-21 111 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

請分享應用程序代碼 –

+0

您提到了「無背景API」,這對於保持UI的響應實際上是一件好事。有幾個調用可能會超過20秒:'createAppFromHomepage','AWSServiceManager','uploadEventRemainingImages',... – SwiftArchitect

+0

AWSService管理器僅用於配置和其他方法,如createAppFromhomepage和uploadEventRemainingImages。這兩個調用只有當我登錄一次的應用程序,而我的問題是該應用程序在啓動畫面上崩潰。我無法訪問登錄屏幕,因此這兩種方法不會影響它。 – Som

回答

0

你被看門狗殺死了。你說的應用程序不會崩潰。

調查

簡介下儀器您的應用程序:你會馬上看到什麼是這麼長時間。

修復

允許didFinishLaunchingWithOptions立即返回。分解出所有的辛勤工作在一個單獨的方法,你可以調用像這樣:

斯威夫特

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 
}