Ich arbeite an einem Kartenspiel in Swift 2.1 mit Xcode 7 und meine App läuft gut im Simulator, stürzt aber ab, wenn ich es auf meinem Gerät teste .Xcode 7/Swift 2.1 "Nachricht vom Debugger: Beendet wegen Speicherproblem"
Mit Breakpoints habe ich den Absturz auf eine NSTimer.scheduledTimerWithTimeInterval
Methode lokalisiert, die nach einer Animation ausgeführt wird (und dann eine andere Animation auslöst).
Ich dachte, vielleicht war es die Größe meiner Bilder, da einige ziemlich groß waren (> 4 MB), also komprimierte ich alle Bilder in der Animation, und insgesamt nehmen sie jetzt weniger als 1 MB auf.
Ich habe auch die Zombie und Leak-Tools ausgeführt und nichts gefunden, also bin ich etwas perplex. Hier ist der Code, wo es abstürzt.
func animateOnDeal() {
self.playerAnimatedCard.hidden = false
self.dealerAnimatedCard.hidden = true
cardOneToDeal()
}
func cardOneToDeal() {
UIView.animateWithDuration(0.5, animations: {
self.playerAnimatedCard.center.x -= self.view.bounds.width
}, completion: {finished in self.flipCardOne()})
}
func flipCardOne() {
self.playerAnimatedCard.playFlipAnimation()
NSTimer.scheduledTimerWithTimeInterval(0.3, target: self, selector: "cardTwoToDeal", userInfo: nil, repeats: false)
}
Und hier ist der Code, der tatsächlich die Animation läuft (in einer UIImageView-Unterklasse):
func playFlipAnimation() {
self.image = UIImage(named: "cardback2.png")
self.animationImages = nil
var imgArray = [UIImage]()
for var x = 1; x <= 12; x++ {
let img = UIImage(named: "img\(x).png")
imgArray.append(img!)
}
self.animationImages = imgArray
self.animationDuration = 0.3
self.animationRepeatCount = 1
self.startAnimating()
Als Randbemerkung, der Debugger einfach erklärt: „Nachricht von Debugger: Abgebrochen wegen Speicherproblem . "
Jede Hilfe würde sehr geschätzt, bitte lassen Sie mich wissen, wenn Sie weitere Informationen benötigen. Vielen Dank!
EDIT:
Also, um es etwas mehr zu testen, habe ich geändert func playFlipAnimation iterieren und mit 5 Bilder anstelle des Originals 12. Diese den Absturz gelöst zu haben scheint, aber ich bin immer noch unsicher warum mehr Bilder die Anwendung in erster Linie zum Absturz bringen.
Die Beendigung aufgrund eines Speicherproblems ist nicht unbedingt ein Hinweis auf ein Leck. Wenn Sie dies noch nicht getan haben, würde ich Ihnen empfehlen, ein Profiling mit dem Zuordnungsinstrument durchzuführen, um genau zu sehen, wo Ihr Speicherwachstum stattfindet. Stellen Sie sicher, dass Sie die Option "Referenzwerte aufzeichnen" aktivieren, und notieren Sie die Anzahl der persistenten Objekte, wenn Sie Ihre App auf dem Gerät ausführen. Es gibt eine Reihe von Tutorials online über das Allocations-Instrument, aber lassen Sie mich wissen, wenn Sie zusätzliche Anleitung hier benötigen. –
@DerekLee, danke für den Hinweis! Also habe ich das Allocations-Instrument ausgeführt und mehrere Flags mit dem Titel "Eine Objective-C-Nachricht wurde an ein invalides Objekt 'IDEActivityReport' unter der Adresse: 0x7fc5dda8bbf0 gesendet." Ich habe versucht, nach dieser Nachricht zu suchen, habe aber nichts Substanzielles gefunden. Irgendeine Idee, was könnte es verursachen? – rdespoiu
@DerekLee Also, um es mehr zu testen, habe ich func playFlipAnimation geändert, um zu iterieren und 5 Bilder anstelle der ursprünglichen 12 hinzuzufügen. Dies scheint den Absturz gelöst zu haben, aber ich bin immer noch unsicher, warum mehr Bilder haben Absturz der Anwendung an erster Stelle. – rdespoiu