我的新闻应用程序中有一个文本到语音功能,我的用户用它来朗读新闻文章。为此,我使用了AVSpeechSynthesizer。我在我的实时应用程序中看到了很多崩溃,在Crashlytics上显示。通过XCode运行应用程序时,我也无法在测试设置中重现此崩溃,也无法在iPhone上使用实时应用程序。我在这里附上Crashlytics堆栈跟踪:
#16
Crashed: AXSpeech
EXC_BAD_ACCESS KERN_INVALID_ADDRESS 0x000041a1b76ca3c1
Crashed: AXSpeech
0 libsystem_pthread.dylib 0x1860ff764 pthread_mutex_lock$VARIANT$mp + 354
1 CoreFoundation 0x18639793c CFRunLoopSourceSignal + 68
2 Foundation 0x186de00c4 performQueueDequeue + 464
3 Foundation 0x186ecf218 __NSThreadPerformPerform + 136
4 CoreFoundation 0x18647b77c __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 24
5 CoreFoundation 0x18647b6fc __CFRunLoopDoSource0 + 88
6 CoreFoundation 0x18647afd8 __CFRunLoopDoSources0 + 288
7 CoreFoundation 0x186478b5c __CFRunLoopRun + 1048
8 CoreFoundation 0x186398c58 CFRunLoopRunSpecific + 436
9 Foundation 0x186dcd594 -[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 304
10 libAXSpeechManager.dylib 0x195ccf854 -[AXSpeechThread main] + 284
11 Foundation 0x186ecf0f4 __NSThread__start__ + 996
12 libsystem_pthread.dylib 0x1860fc2b4 _pthread_body + 308
13 libsystem_pthread.dylib 0x1860fc180 _pthread_body + 310
14 libsystem_pthread.dylib 0x1860fab74 thread_start + 4
很明显,AXSpeech线程崩溃了。有人可以帮我这个,因为我一直在拉我的头发无济于事,无崩溃用户的下降百分比一直困扰着我。
答案 0 :(得分:0)
我的应用与AVSpeechSynthesizer存在同样的问题。 Crashlytics显示当应用程序尝试在主线程中初始化AVSpeechSynthesizer时会发生这种情况。崩溃发生在与您的堆栈跟踪相同的其他线程中。这是主线程的堆栈跟踪。似乎问题可能与共享音频会话有关。希望这会以某种方式帮助你。
class vc1: UIViewController, UITableViewDelegate, UITableViewDataSource {
let tableView = UITableView()
let options: [Int] = [1,2]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return options.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
return UITableViewCell()
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let vc = vc2()
//Not sure where to put the setup to be honest
//option 1:
vc.setupTableView(forCell: indexPath.item)
present(vc, animated: true) {
//option 2:
vc.setupTableView(forCell: indexPath.item)
}
}
}
class vc2: UIViewController, UITableViewDelegate, UITableViewDataSource {
let tableView = UITableView()
var selectedCell: Int!
//Having an nested array in an array will solve this custom "page" you are looking for
let results: [[String]] = [["test1", "test2"], ["test3", "test4"]]
override func viewDidLoad() {
super.viewDidLoad()
tableView.delegate = self
tableView.dataSource = self
}
func setupTableView(forCell cell: Int) {
selectedCell = cell
tableView.reloadData()
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return results[selectedCell].count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
cell.textLabel = results[selectedCell][indexPath.item]
return UITableViewCell()
}
}