我正在跟踪应用程序中的崩溃。这种特殊的崩溃给了我错误“由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'仅在主线程上运行!'”。奇怪的是,我似乎无法使用设备或模拟器来重新创建崩溃,但是在我的分析中,它表明该崩溃经常发生。有人告诉我这是因为您只能在主线程上进行UI更新,所以我更新了代码,但是此崩溃不断发生,而且我仍然无法在手机或模拟器上重新创建崩溃。

这是崩溃发生的代码:

indicator.startAnimation()
let audioData = NSData(contentsOfURL: EditSongViewController.url.urlComplete!)
let dataImage: NSData = UIImageJPEGRepresentation(songImage.image!, 1.0)!

let imageFile = PFFile(name: "photo.jpg", data: dataImage)
let audioFile = PFFile(name: "song.mp4", data: audioData)
audioFile.saveInBackground()
imageFile.saveInBackground()

let testObject = PFObject(className: "PrivateSongs")
testObject["songFile"] = audioFile
testObject["image"] = imageFile
testObject["username"] = PFUser.currentUser().username
testObject["user"] = PFUser.currentUser()
testObject["title"] = self.songTitleText.text
testObject["songInfo"] = self.songInfoText.text
if RecordViewController.fileURL.songLyrics != nil {
    testObject["lyrics"] = RecordViewController.fileURL.songLyrics
}
if (isPrivate == true) {
    testObject["isPrivate"] = true
} else {
    testObject["isPrivate"] = false
}

testObject.saveInBackgroundWithBlock ({ (success, error) -> Void in
    if (success) {

        if self.chartsSwitch.on {
            let chart = PFObject(className: "Songs")
            chart["artistName"] = PFUser.currentUser().username
            chart["songFile"] = audioFile
            chart["title"] = self.songTitleText.text
            chart["picture"] = imageFile
            chart["user"] = PFUser.currentUser()
            chart["likes"] = 0
            if RecordViewController.fileURL.songLyrics != nil {
                chart["lyrics"] = RecordViewController.fileURL.songLyrics
            }
            chart.saveInBackground()

        }
        PostViewControler.share.shareUrl = audioFile.url!
        dispatch_async(dispatch_get_main_queue(), ^{
        /* Your UI code */
        self.postButton.hidden = true
        self.addPictureButton.hidden = true
        self.indicator.stopAnimation(false, completion: nil)

          self.navigationController!.pushViewController(self.storyboard!.instantiateViewControllerWithIdentifier("ShareViewController") , animated: true)
        });

    } else {
        dispatch_async(dispatch_get_main_queue(), ^{
        /* Your UI code */
        self.indicator.stopAnimation(false, completion: nil)
        self.helper.showErrorAlert("Couldn't save your song please try again.")
        });

    }
})


崩溃:

Terminating app due to an uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!' Error symbolicating crash report.
Last Exception Backtrace
0   CoreFoundation  0x2409068b
1   libobjc.A.dylib 0x3558ee17  objc_exception_throw + 38
2   CoreFoundation  0x24090561  <redacted> + 0
3   Foundation  0x24e1b0e3  <redacted> + 86
4   UIFoundation    0x323d5a6f  <redacted> + 398
5   UIFoundation    0x323d57b3  <redacted> + 1510
6   UIFoundation    0x32404989  <redacted> + 724
7   UIFoundation    0x32404a7d  <redacted> + 52
8   UIFoundation    0x324277a3  <redacted> + 122
9   UIFoundation    0x32427339  <redacted> + 400
10  UIFoundation    0x32426f2b  <redacted> + 78
11  UIKit   0x28203227  <redacted> + 262
12  UIKit   0x28203107  <redacted> + 178
13  meipmusic   0x145e74    meipmusic + 437876
14  meipmusic   0x146e20    meipmusic + 441888
15  meipmusic   0x147144    meipmusic + 442692
16  meipmusic   0x13c994    meipmusic + 399764
17  meipmusic   0x14d760    meipmusic + 468832
18  meipmusic   0x19d810    meipmusic + 796688
19  AVFoundation    0x228625e7  <redacted> + 558
20  libdispatch.dylib   0x35c90d2b  <redacted> + 10
21  libdispatch.dylib   0x35c9d92b  <redacted> + 1758
22  libdispatch.dylib   0x35c9cf69  <redacted> + 284
23  libdispatch.dylib   0x35c9f665  <redacted> + 396
24  libdispatch.dylib   0x35c9f4d5  <redacted> + 96
25  libsystem_pthread.dylib 0x35e4ab45  _pthread_wqthread + 1024
26  libsystem_pthread.dylib 0x35e4a734  start_wqthread + 8
Crashed Thread 20 :
0   CoreFoundation  0x240909c7
1   libobjc.A.dylib 0x3558f09f
2   libc++abi.dylib 0x34c63e17
3   libc++abi.dylib 0x34c638f9
4   libobjc.A.dylib 0x3558ef5f
5   AVFoundation    0x22862651
6   libdispatch.dylib   0x35c90d2b  <redacted> + 10
7   libdispatch.dylib   0x35c9d92b  <redacted> + 1758
8   libdispatch.dylib   0x35c9cf69  <redacted> + 284
9   libdispatch.dylib   0x35c9f665  <redacted> + 396
10  libdispatch.dylib   0x35c9f4d5  <redacted> + 96
11  libsystem_pthread.dylib 0x35e4ab45  _pthread_wqthread + 1024
12  libsystem_pthread.dylib 0x35e4a734  start_wqthread + 8
Thread 0 :
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   GraphicsServices    0x2d058ad1
6   UIKit   0x281ba899
7   meipmusic   0x1849f0
8   libdyld.dylib   0x35cda873
Thread 1 :
0   libsystem_kernel.dylib  0x35dab3c0
1   libdispatch.dylib   0x35ca4f27
Thread 2 (AXSpeech):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   Foundation  0x24d8f975
6   libAXSpeechManager.dylib    0x34694791
7   Foundation  0x24e60635
8   libsystem_pthread.dylib 0x35e4c873
9   libsystem_pthread.dylib 0x35e4c7e7
10  libsystem_pthread.dylib 0x35e4a740
Thread 3 (AVAudioSession Notify Thread):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   libAVFAudio.dylib   0x2298a16d
6   libAVFAudio.dylib   0x2295ec87
7   libsystem_pthread.dylib 0x35e4c873
8   libsystem_pthread.dylib 0x35e4c7e7
9   libsystem_pthread.dylib 0x35e4a740
Thread 4 :
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   Foundation  0x24d8f975
6   Foundation  0x24dde58d
7   libdispatch.dylib   0x35c90d2b  <redacted> + 10
8   libdispatch.dylib   0x35c9b535
9   libdispatch.dylib   0x35c9faf1
10  libdispatch.dylib   0x35c9f4d5  <redacted> + 96
11  libsystem_pthread.dylib 0x35e4ab45  _pthread_wqthread + 1024
12  libsystem_pthread.dylib 0x35e4a734  start_wqthread + 8
Thread 5 :
0   libsystem_kernel.dylib  0x35da9a60
1   libsystem_pthread.dylib 0x35e4ccb1
2   Foundation  0x24ddac27
3   meipmusic   0x41b6bb
4   Foundation  0x24e60635
5   libsystem_pthread.dylib 0x35e4c873
6   libsystem_pthread.dylib 0x35e4c7e7
7   libsystem_pthread.dylib 0x35e4a740
Thread 6 (com.apple.NSURLConnectionLoader):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   CFNetwork   0x23917ee7
6   Foundation  0x24e60635
7   libsystem_pthread.dylib 0x35e4c873
8   libsystem_pthread.dylib 0x35e4c7e7
9   libsystem_pthread.dylib 0x35e4a740
Thread 7 (PF_AFNetworking):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   Foundation  0x24d8f975
6   Foundation  0x24dde58d
7   meipmusic   0x4495c3
8   Foundation  0x24e60635
9   libsystem_pthread.dylib 0x35e4c873
10  libsystem_pthread.dylib 0x35e4c7e7
11  libsystem_pthread.dylib 0x35e4a740
Thread 8 (com.apple.CFSocket.private):
0   libsystem_kernel.dylib  0x35da9fb4
1   libsystem_pthread.dylib 0x35e4c873
2   libsystem_pthread.dylib 0x35e4c7e7
3   libsystem_pthread.dylib 0x35e4a740
Thread 9 (WebThread):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   WebCore 0x32e7f287
6   libsystem_pthread.dylib 0x35e4c873
7   libsystem_pthread.dylib 0x35e4c7e7
8   libsystem_pthread.dylib 0x35e4a740
Thread 10 (JavaScriptCore::Marking):
0   libsystem_kernel.dylib  0x35da9a60
1   libsystem_pthread.dylib 0x35e4ccb1
2   libc++.1.dylib  0x34c0786d
3   JavaScriptCore  0x2565c0f5
4   JavaScriptCore  0x2565c15f
5   JavaScriptCore  0x2546dd51
6   JavaScriptCore  0x2546dcaf
7   libsystem_pthread.dylib 0x35e4c873
8   libsystem_pthread.dylib 0x35e4c7e7
9   libsystem_pthread.dylib 0x35e4a740
Thread 11 (WebCore: CFNetwork Loader):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   WebCore 0x32ea308d
6   JavaScriptCore  0x2546dd51
7   JavaScriptCore  0x2546dcaf
8   libsystem_pthread.dylib 0x35e4c873
9   libsystem_pthread.dylib 0x35e4c7e7
10  libsystem_pthread.dylib 0x35e4a740
Thread 12 (AXSpeech):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   Foundation  0x24d8f975
6   libAXSpeechManager.dylib    0x34694791
7   Foundation  0x24e60635
8   libsystem_pthread.dylib 0x35e4c873
9   libsystem_pthread.dylib 0x35e4c7e7
10  libsystem_pthread.dylib 0x35e4a740
Thread 13 :
0   libsystem_kernel.dylib  0x35daa0c4
1   libc++.1.dylib  0x34c468b9
2   JavaScriptCore  0x25819ee3
3   JavaScriptCore  0x25819cab
4   JavaScriptCore  0x2581b807
5   JavaScriptCore  0x2581b7a1
6   libsystem_pthread.dylib 0x35e4c873
7   libsystem_pthread.dylib 0x35e4c7e7
8   libsystem_pthread.dylib 0x35e4a740
Thread 14 (com.apple.coremedia.player.async):
0   libsystem_kernel.dylib  0x35d961b4
1   MediaToolbox    0x25c3479d
2   CoreMedia   0x2485ab41
3   libsystem_pthread.dylib 0x35e4c873
4   libsystem_pthread.dylib 0x35e4c7e7
5   libsystem_pthread.dylib 0x35e4a740
Thread 15 (WebCore: LocalStorage):
0   libsystem_kernel.dylib  0x35da9a60
1   libsystem_pthread.dylib 0x35e4ccb1
2   JavaScriptCore  0x25471577
3   WebKitLegacy    0x33ad8f7d
4   WebKitLegacy    0x33ad889d
5   JavaScriptCore  0x2546dd51
6   JavaScriptCore  0x2546dcaf
7   libsystem_pthread.dylib 0x35e4c873
8   libsystem_pthread.dylib 0x35e4c7e7
9   libsystem_pthread.dylib 0x35e4a740
Thread 16 :
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   TTSSpeechBundle 0x3512009
6   libsystem_pthread.dylib 0x35e4c873
7   libsystem_pthread.dylib 0x35e4c7e7
8   libsystem_pthread.dylib 0x35e4a740
Thread 17 (com.apple.coreaudio.AQClient):
0   libsystem_kernel.dylib  0x35d96164
1   CoreFoundation  0x24053905
2   CoreFoundation  0x24051c8d
3   CoreFoundation  0x23fa5249
4   CoreFoundation  0x23fa5035
5   AudioToolbox    0x2342c5ad
6   AudioToolbox    0x2341551f
7   libsystem_pthread.dylib 0x35e4c873
8   libsystem_pthread.dylib 0x35e4c7e7
9   libsystem_pthread.dylib 0x35e4a740
Thread 18 :
0   libsystem_kernel.dylib  0x35daa92c
1   libsystem_pthread.dylib 0x35e4a734  start_wqthread + 8
Thread 19 (com.apple.coremedia.player.async):
0   libsystem_kernel.dylib  0x35d961b4
1   MediaToolbox    0x25c3479d
2   CoreMedia   0x2485ab41
3   libsystem_pthread.dylib 0x35e4c873
4   libsystem_pthread.dylib 0x35e4c7e7
5   libsystem_pthread.dylib 0x35e4a740
Thread 21 :
0   libsystem_kernel.dylib  0x35daa92c
1   libsystem_pthread.dylib 0x35e4a734  start_wqthread + 8
Thread 22 :
0   libsystem_kernel.dylib  0x35daa92c
1   libsystem_pthread.dylib 0x35e4a734  start_wqthread + 8

最佳答案

至少,这是绝对在后台队列上运行的UI代码:

    if self.chartsSwitch.on {


我认为这行也是:

        chart["title"] = self.songTitleText.text


您不能在后台队列上访问UIKit。您必须在主队列上收集所有这些数据,并将其传递给在后台运行的事物。

我假设整个块实际上都在后台队列中(因为从NSData加载URL不应在主队列上完成)。在这种情况下,这是后台队列上的变异UI更改:

indicator.startAnimation()


如果还有更多,我不会感到惊讶。您必须将模型代码和网络代码与UI代码分开。

10-08 10:57