最近,我一直在研究一个应用程序。该应用程序的目标是向您展示在通知中心的今日视图中拍摄的最近10张照片,以及其他内容。该应用程序在iOS模拟器中完美运行,但只要我将它放在真实设备上进行测试,它就会失败。它返回错误:
fatal error: Unexpected nil while unwrapping an Optional value
通常这很容易修复,因为XCode会突出显示返回nil的代码,并为您提供修复它的机会。在这种情况下,我的代码都没有突出显示。相反,它突出显示来自线程1的一行(这是正确的术语吗?线程1?),如下所示: 另请注意,在高位线上方是行
; function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded of Swift.(_fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) -> ()).(closure #2)
由于&#34; fatalErrorMessage&#34;我在图片中包含了这一行。一部分。我怀疑这可以让我知道错误,但我不知道这意味着什么。我还没有理解这一点。
此外,经过一番思考后,我在viewDidLoad()函数中放置了一个断点,以期跟踪任何nil值,但代码似乎从未达到过这一点。好像我的代码都没有被运行。
有没有人有这样的问题/了解错误代码(如果那是什么)意味着什么?我现在非常绝望,因此我在这里。
谢谢, CodeIt
修改 我在viewDidLoad函数中放置了一个println行来仔细检查它是否正在运行。 println函数运行和输出正确,所以我想我可能只是搞砸了我的断点。无论如何 - 代码运行,但它仍然没有突出显示导致零值的任何代码。
编辑2: 根据要求,我已插入部分代码。请记住,此代码是&#34;初稿&#34;,如果您愿意,我还没有去清理它。我只是想让它发挥作用:
@IBOutlet weak var currentPosLabel: UILabel!
var currentImgPos = 0
@IBOutlet weak var imageView: UIImageView!
var images: NSMutableArray!
var totalImageCountNeeded: Int!
func fetchPhotos() {
images = NSMutableArray()
totalImageCountNeeded = 10
self.fetchPhotoAtIndexFromEnd(0)
}
func fetchPhotoAtIndexFromEnd(index: Int) {
let imgManager = PHImageManager.defaultManager()
var requestOptions = PHImageRequestOptions()
requestOptions.synchronous = true
var fetchOptions = PHFetchOptions()
fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
if let fetchResult = PHAsset.fetchAssetsWithMediaType(PHAssetMediaType.Image, options: fetchOptions) {
if fetchResult.count > 0 {
imgManager.requestImageForAsset(fetchResult.objectAtIndex(fetchResult.count - 1 - index) as? PHAsset, targetSize: view.frame.size, contentMode: PHImageContentMode.AspectFill, options: requestOptions, resultHandler: { (image, _) in
self.images.addObject(image)
if index + 1 < fetchResult.count && self.images.count < self.totalImageCountNeeded {
self.fetchPhotoAtIndexFromEnd(index + 1)
} else {
println("Completed array: \(self.images)")
}
})
}
}
}
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewDidAppear(animated: Bool) {
// NOTE: I am calling the fetchPhotos() function here since earlier in my debugging I thought the problem may be that I was calling it too early in the viewDidLoad function. It an incorrect theory, but it was worth a try.
fetchPhotos()
if images.count > 0 {
imageView.image = images[1] as? UIImage
}
}
我删除了一些我知道没有理由导致错误的代码部分,例如@IBActions,didReceiveMemoryWarning()等。
答案 0 :(得分:2)
即便是老问题。我通过删除xcode中的派生数据找到了我的问题。
Xcode - &gt; window-&gt;项目然后选择并删除项目派生数据。
答案 1 :(得分:1)
你应该在模拟器和真实设备上运行相同的设备。例如,如果你在真实设备上运行5s然后在模拟器上尝试相同的设备。通过运行模拟器,它肯定会显示错误。我的错误是不是连接@IBActions。希望这个提示能帮助你。
答案 2 :(得分:0)
我在尝试将非可选值设置为MainMessage
的隐式解包可选值时收到了同样的错误。
实施例。 ChatMessage
返回nil
,其值为nil,然后您尝试将其设置为常规值。
someGlobalFunction()