2015-06-19 28 views
9

Tôi thấy một số lượng nhỏ các lỗi SpriteKit playSoundFileNamed từ nhật ký sự cố của ứng dụng. Các sự cố xảy ra trên iOS 8.3.SpriteKit playSoundFileNamed crash on iOS 8.3

0 CoreFoundation __exceptionPreprocess 
1 libobjc.A.dylib objc_exception_throw 
2 CoreFoundation -[NSException initWithCoder:] 
3 SpriteKit +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:] 
4 SpriteKit +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:] 
... 

Và một vài sự cố liên quan:

0 CoreFoundation __exceptionPreprocess 
1 libobjc.A.dylib objc_exception_throw 
2 CoreFoundation -[NSException raise:format:] 
3 SpriteKit +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:] 
4 SpriteKit +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:] 
... 

Có ai biết nguyên nhân gây ra vụ tai nạn này và làm thế nào để sửa chữa nó? Tôi có nên gói tất cả các cuộc gọi đến playSoundFileNamed: trong một khối try-catch không?

Edited

Thông tin thêm:

Tôi đang sử dụng Swift. Đang cố gắng chơi âm thanh của riêng tôi và tôi thấy những tai nạn đến từ những âm thanh khác nhau. Tôi cũng thấy một vài báo cáo từ iOS 8.2 nên lỗi này có thể không phải là iOS 8.3 cụ thể.

Các dòng mà phát âm thanh:

var sound = SKAction.playSoundFileNamed("Sound/ABC.mp3", waitForCompletion: false) 
self.runAction(sound) 
+0

Vui lòng cung cấp thêm thông tin: Bạn có đang cố gắng phát âm thanh của riêng mình hoặc âm thanh từ gói hệ thống không? Đó có phải là một âm thanh đặc biệt bị treo hoặc tất cả chúng? Nó có bị lỗi trên iOS 8.3 không? Bạn có thể dán các dòng tạo/phát âm thanh không? vv ... – lchamp

+0

Bạn đang sử dụng ngôn ngữ nào - Swift hoặc Obj-C? – sangony

+0

Tôi đang sử dụng Swift. Đang cố gắng chơi âm thanh của riêng tôi và tôi thấy những tai nạn đến từ những âm thanh khác nhau. Tôi cũng thấy một vài báo cáo từ iOS 8.2 nên bây giờ nó có thể là iOS 8.3. – user1615898

Trả lời

2

Tôi đã trải qua một vấn đề tương tự trong một thời gian trở lại. Vấn đề là các biến không thể được thực hiện một cách nhanh chóng, đủ để chơi như tôi đã tạo ra biến mỗi khi người dùng khai thác trên màn hình. Hãy thử xác định hành động trong didMoveToView và xem liệu bạn có gặp sự cố không. Hy vọng rằng sẽ giúp

0

Tôi gặp sự cố tương tự. Trò chơi của tôi (swift + spritekit) đã bị lỗi không xác định trên iOS 8.x. nhưng trên 9.x hoạt động hoàn hảo. Mảnh đăng nhập:

2015-12-15 21:27:40.827 MyGame[24055:2285857] 
     *** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
     reason: 'Resource assets/mfx/my_sound.m4a can not be loaded' 
    *** First throw call stack: 
    (
    0 CoreFoundation  0x008ae746 __exceptionPreprocess + 182 
    1 libobjc.A.dylib 0x02598a97 objc_exception_throw + 44 
    2 CoreFoundation  0x008ae66d +[NSException raise:format:] + 141 
    3 SpriteKit   0x011ca435 +[SKPlaySound playSoundFileNamed:atPosition:waitForCompletion:] + 628 
    4 SpriteKit   0x011601b4 +[SKAction(SKActions) playSoundFileNamed:waitForCompletion:] + 78 
    5 MyGame    0x0012eb25 

Giải pháp là: chỉ nạp tất cả âm thanh một lần, làm hằng số (let). Không tạo biến mỗi khi bạn muốn phát âm thanh.

import SpriteKit 
import AVFoundation 

class Sounds 
{ 
    static let SOUND1 = SKAction.playSoundFileNamed("assets/sound1.m4a", waitForCompletion: false) 
    static let SOUND2 = SKAction.playSoundFileNamed("assets/sound2.m4a", waitForCompletion: false) 
} 

Sau đó, trong một số SKSpriteNode ví dụ:

func playSound1() 
{ 
    self.runAction(Sounds.SOUND1) 
} 

Tìm tương tự/cùng một vấn đề ở đây: Skaction.playsoundfilenamed crashes when repeat - sprite kit

1

Hãy thử điều này và cho tôi biết nếu làm việc của nó.

var audioPlayer = AVAudioPlayer() 

func playAudio() { 
    // Set the sound file name & extension 
    let alertSound = NSURL(fileURLWithPath: NSBundle.mainBundle().pathForResource("ABC", ofType: "mp3")!) 


    // Preperation 
    try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: []) 
    try! AVAudioSession.sharedInstance().setActive(true) 

    // Play the sound 
    do { 
     try audioPlayer = AVAudioPlayer(contentsOfURL: alertSound) 
     audioPlayer.prepareToPlay() 
     audioPlayer.play() 
    } catch { 
     print("there is \(error)") 
    } 
} 
Các vấn đề liên quan