奇怪的Swift崩溃堆栈EXC_BREAKPOINT 0x00000000e7ffdefe

时间:2016-03-29 04:53:49

标签: ios swift

我正在尝试调试以下崩溃,并且对此错误的含义有点无能为力。我是通过iPhone上的应用程序从用户那里得到的,崩溃来自Crashlytics。

崩溃标题为:EXC_BREAKPOINT 0x00000000e7ffdefe 崩溃:com.apple.main-thread

  

线程:崩溃:com.apple.main-thread 0 Mutual
  0xfff58 AlbumViewController。(getFacebookAlbums(() - >()?) - >   ())。(闭包#1)(AlbumViewController.swift:78)1 Mutual
  0xfe95c部分适用于AlbumViewController。(getFacebookAlbums(() - >   ()?) - > ())。(闭包#1)(AlbumViewController.swift)2 Mutual
  0xfe95c部分适用于AlbumViewController。(getFacebookAlbums(() - >   ()?) - > ())。(闭包#1)(AlbumViewController.swift)3 FBSDKCoreKit
  0x5a2661 - [FBSDKGraphRequestMetadata   invokeCompletionHandlerForConnection:withResults:error:] + 96

它指向的代码(AlbumViewController的第78行)是这个函数的结束括号:

func getFacebookAlbums(completion: (() -> Void)? = nil){
    FBSDKGraphRequest(graphPath: "me/albums?fields=name,picture,count&limit=16&offset=\(offset)", parameters: nil).startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in
        if let albumData = result["data"] as? NSArray{

            for album in albumData{
                let albumName = album["name"] as? String ?? ""
                let albumId = album["id"] as? String ?? "-1"
                let count = album["count"] as? Int ?? 0
                var coverURL = ""
                if let picture = album["picture"] as? NSDictionary{
                    if let pictureData = picture["data"] as? NSDictionary{
                        coverURL = pictureData["url"] as? String ?? ""
                    }
                }

                let newAlbum = AlbumData(name: albumName, id: albumId, coverURL: coverURL, photosCount: count)
                self.albums.append(newAlbum)
            }

            self.albumView.tableView.reloadData()
            self.albumView.tableView.hidden = false
            self.albumView.loadingView.hideLoadingView()

            completion?()
            self.downloadAlbumThumbnails()
        }
    }
}

如果错误太模糊,则很难调试。有没有人对导致这种情况的原因有任何了解?

更新

这是我从Crashlytics

获得的屏幕

Crash Data

这是方法调用和闭包内容:

    getFacebookAlbums { () -> Void in
        self.albumView.activityIndicator.stopAnimating()
        self.albumView.refreshContorl.endRefreshing()
    }

1 个答案:

答案 0 :(得分:0)

你必须传递 self 的弱引用。当 self 从内存中移除时,闭包仍然可以存活并尝试调用 self 并发生崩溃。