【问题标题】:app crash on iphone not on simulatoriPhone上的应用程序崩溃不在模拟器上
【发布时间】:2016-10-12 00:12:16
【问题描述】:

每当我点击列中的最后一行时,应用程序都会在 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.
    }
    */

}

【问题讨论】:

  • 请附上您看到的一些代码或错误消息,以便更好地了解您的问题。
  • 感谢您回答我的问题。现在我已经发布了上面的代码。
  • 尝试添加异常断点,以便检查您在哪一行代码崩溃
  • 很高兴它可以工作,拉姆。它的标准做法是“接受” - 用“勾号”标记它曾经回答你发现解决了问题。这有助于搜索系统的其他用户

标签: iphone swift swift2 ios-simulator xcode7


【解决方案1】:

对于您正在加载的所有图像,很可能您的手机内存不足 - 我最近遇到了这个问题。没有错误,但有时我确实在调试控制台上看到“内存不足警告”。

要诊断它,请创建一个图像名称数组,循环遍历该数组以填充 UIImage 数组,但请检查它们是否在您运行时加载。然后您可以将其设置为动画图像。所以,

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

你可以在 continue 处设置一个断点,看看你能走多远。

假设这是怎么回事,要修复问题,您需要使用图像编辑程序使图像更小(以像素为单位)。就我而言,我的图像是以 4000x6000 像素拍摄的照片;我发现将它们调整为实际显示的大小会有所不同。此外,以 50% 的损失保存文件使它们大约是原始大小的 15%(以字节计),这使它们的加载速度更快。我向同事展示了原始图像和调整大小/有损图像,他们看不出有什么不同(有人认为这是某种玩笑)。

【讨论】:

  • 非常感谢您的建议!非常感谢:-)
【解决方案2】:

我在使用大量图像 (100) 制作的应用程序时遇到了类似的问题。它们的存在也使应用程序的速度有所放缓。当我减小每​​张图片的文件大小 - 不影响图片质量。有效!!在 Apple 的“预览”中轻松完成。

解决方案:

  1. 在 mac OSX 中使用“预览”打开图像

  2. 转到顶部菜单...“工具”...“调整大小”

  3. 缩小图片像素大小+保存

  4. 将新保存的图像放回 Xcode 以供您的应用使用

将文件大小减少 40%,而应用上的图像质量没有任何降低!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 2019-04-13
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 2011-08-04
    • 2010-12-03
    相关资源
    最近更新 更多