2016-06-10 340 views
0

每當我點擊列中的最後一行,應用程序就會在iPhone上崩潰,但不會在模擬器上崩潰。其他一切正常。我沒有收到任何錯誤消息。代碼與模擬器一起工作得很好。iPhone上的應用程序崩潰不在模擬器上

import UIKit 

class EarthVC: UIViewController { 

    @IBOutlet var slideShow1: UIImageView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     // Do any additional setup after loading the view. 

     slideShow1.animationImages = [ 

      UIImage(named: "Earth1.jpg")!, 
      UIImage(named: "Earth2.jpg")!, 
      UIImage(named: "Earth3.jpg")!, 
      UIImage(named: "Earth4.jpg")!, 
      UIImage(named: "Earth5.jpg")!, 
      UIImage(named: "Earth6.jpg")!, 
      UIImage(named: "Earth7.jpg")!, 
      UIImage(named: "Earth8.jpg")!, 
      UIImage(named: "Earth9.jpg")!, 
      UIImage(named: "Earth10.jpg")!, 
      UIImage(named: "Earth11.jpg")!, 
      UIImage(named: "Earth12.jpg")!, 
      UIImage(named: "Earth13.jpg")!, 
      UIImage(named: "Earth14.jpg")!, 
      UIImage(named: "Earth15.jpg")!, 
      UIImage(named: "Earth16.jpg")!, 
      UIImage(named: "Earth17.jpg")!, 
      UIImage(named: "Earth18.jpg")!, 
      UIImage(named: "Earth19.jpg")!, 
      UIImage(named: "Earth20.jpg")!, 
      UIImage(named: "Earth21.jpg")!, 
      UIImage(named: "Earth22.jpg")!, 
      UIImage(named: "Earth23.jpg")!, 
      UIImage(named: "Earth24.jpg")!, 
      UIImage(named: "Earth25.jpg")!, 
      UIImage(named: "Earth26.jpg")!, 
      UIImage(named: "Earth27.jpg")!, 
      UIImage(named: "Earth28.jpg")!, 
      UIImage(named: "Earth29.jpg")!, 
      UIImage(named: "Earth30.jpg")!, 
      UIImage(named: "Earth31.jpg")! 
     ] 

     slideShow1.animationDuration = 93 
     slideShow1.startAnimating() 
    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    /* 
    // MARK: - Navigation 

    // In a storyboard-based application, you will often want to do a little preparation before navigation 
    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
     // Get the new view controller using segue.destinationViewController. 
     // Pass the selected object to the new view controller. 
    } 
    */ 

} 
+4

請包括您看到的一些代碼或錯誤消息,以便更好地理解您的問題。 – Nirupa

+0

謝謝你回答我的問題。現在我已經發布了上面的代碼。 – Ram

+2

嘗試添加異常斷點,以便您可以檢查哪一行代碼會導致崩潰 –

回答

0

隨着您加載的所有圖像,很可能是您的手機內存不足 - 我最近遇到了這個問題。沒有錯誤,但有時我在調試控制檯上看到「低內存警告」。

爲了診斷它,創建一個圖像名稱的數組,循環遍歷該數組以填充UIImage的數組,但檢查它們是否按照原樣加載。然後,您可以將其設置爲animationImages。所以,

let imageNames = [ 
    "Earth1.jpg", 
    "Earth2.jpg", 
    // ... 
    "Earth31.jpg" 
] 

var images = [UIImage]() 
for name in imageNames 
{ 
    guard let image = UIImage(named: name) else { 
     NSLog("Failed to load image \(name)") 
     continue 
    } 
    images.append(image) 
} 
slideShow1.animationImages = images 

你可以在繼續設置一個斷點,看看你有多遠。

假設是這樣,修復問題,您將需要使用圖像編輯程序使圖像更小(以像素爲單位)。就我而言,我的圖像是以4000x6000像素拍攝的照片;我發現將它們調整爲實際顯示的大小會產生變化。另外,保存50%文件損失的文件大約佔原始文件大小的15%(以字節計),這使得它們的加載速度更快。我向同事展示了原始的和調整大小的/有損圖像,他們看不出有什麼區別(有人認爲這是一種笑話)。

+0

非常感謝您的建議!非常感謝:-) – Ram

0

我有一個類似的問題,我用大量的圖像(100)製作的應用程序。他們的存在也使應用程序有所放慢。當我減少了每個圖像的文件大小 - 而不會影響圖像質量。有效!!在Apple的「預覽」中輕鬆完成。

解決方案:

  1. 公開賽在Mac OSX上的圖像與 '預覽'

  2. 轉到菜單頂部... '工具' ... '調整大小'

  3. 減少圖像的像素大小+保存

  4. 將新保存的圖像放回Xcode爲您的應用程序

減少文件大小的40%,沒有看到應用程序的圖像質量下降任何工作!

+0

它的工作原理!非常感謝! – Ram

相關問題