![](/img/trans.png)
[英]My app runs properly on the simulator, but crashes on my ios 13.2 iPhone
[英]iOS app crashes on an iPhone even though it runs on simulator
盡管它在模擬器上運行良好,但我的多視圖應用程序在iPhone 5 C上崩潰了(“很好”,我的意思是沒有內存泄漏,按鈕移動到位時動畫不流暢等)。 該應用程序是用Objective C編寫的,模擬器在Xcode 8.3.3下運行。 手機運行iOS 10.3.3。
當我成功地從VC1切換到VC2到VC3后,按下從SyncViewController
切換到PlayViewController
即從VC3切換到VC4的同步按鈕時,就會發生問題。 每個ViewController
都有一個委托方法,該方法響應上一個ViewController.
按下的按鈕ViewController.
崩潰在以下方法中持續發生,該方法在PlayView
中顯示三件事:可水平滾動的圖形樂譜,具有每秒被覆蓋的時間顯示的按鈕以及停止按鈕。
- (UIView *)showScoreClockAndExit:(CGRect)panel highlight:(int)currentState seconds:(NSUInteger)clockCount {
if (!self.seconds)
{
[self.seconds removeFromSuperview];
self.seconds = [[ClockButton alloc] loadClockButton:(NSUInteger)clockCount];
[self addSubview:_seconds];
}
ClockButton *seconds = [[ClockButton alloc] loadClockButton:(NSUInteger)clockCount];
[self addSubview:seconds];
EscButton *escape = [[EscButton alloc] loadEscButton:(NSString *)@"stop"];
[self addSubview:escape];
GraphicScore *score = [[GraphicScore alloc] createGraphicScore:(CGRect)panel highlight:(int)currentState];
[self addSubview:score];
return self;
}
奇怪的是,即使PlayViewController
已經開始從SyncViewController,
接管SyncViewController,
即先前已由SyncViewController
加載的最后一個UIView
仍然凍結在設備本身SyncViewController,
即PlayView
已加載, UITimer
已設置且所選播放器的播放狀態為啟用,因為調試日志( 如下所示 )清楚顯示
2017-07-24 15:25:24.950097+1000 SatGam2[3052:1712261] PlayView loaded (selectedFamily:1 selectedPlayerID:1)
2017-07-24 15:25:24.950923+1000 SatGam2[3052:1712261] TIME: 00:00
2017-07-24 15:25:24.951905+1000 SatGam2[3052:1712261] ENABLED (player 1: state 0)
(lldb)
遵循在這里找到的有用線索,我鍵入: bt
並按: Enter以獲取以下日志
SatGam2 was compiled with optimization - stepping may behave oddly; variables may not be available.
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0xe15d25d2)
frame #0: 0x1b300694 libobjc.A.dylib`objc_retain + 4
frame #1: 0x21291d0a UIKit`-[UIView(Hierarchy) addSubview:] + 18
* frame #2: 0x000c2696 SatGam2`-[PlayView showScoreClockAndExit:highlight:seconds:](self=0x15e9ed70, _cmd=<unavailable>, panel=<unavailable>, currentState=<unavailable>, clockCount=<unavailable>) at PlayView.m:215 [opt]
frame #3: 0x000c246c SatGam2`-[PlayView initWithFrame:state:family:player:cue:seconds:](self=<unavailable>, _cmd=<unavailable>, frame=<unavailable>, currentState=<unavailable>, selectedFamily=<unavailable>, selectedPlayerID=<unavailable>, entryString=@"", clockCount=<unavailable>) at PlayView.m:149 [opt]
frame #4: 0x000cd0da SatGam2`-[PlayViewController nextState](self=0x168aae00, _cmd=<unavailable>) at PlayViewController.m:244 [opt]
frame #5: 0x000ccc40 SatGam2`-[PlayViewController viewDidLoad](self=0x168aae00, _cmd=<unavailable>) at PlayViewController.m:152 [opt]
frame #6: 0x2128b27e UIKit`-[UIViewController loadViewIfRequired] + 966
frame #7: 0x2128aea0 UIKit`-[UIViewController view] + 22
frame #8: 0x000c1266 SatGam2`-[MultiviewViewController displayView:](self=0x15d85710, _cmd=<unavailable>, intNewView=4) at MultiviewViewController.m:45 [opt]
frame #9: 0x000c2fb6 SatGam2`-[SyncViewController fromSyncButton:](self=<unavailable>, _cmd=<unavailable>, button=<unavailable>) at SyncViewController.m:65 [opt]
frame #10: 0x212bf784 UIKit`-[UIApplication sendAction:to:from:forEvent:] + 76
frame #11: 0x212bf718 UIKit`-[UIControl sendAction:to:forEvent:] + 62
frame #12: 0x212a9d48 UIKit`-[UIControl _sendActionsForEvents:withEvent:] + 478
frame #13: 0x212bf054 UIKit`-[UIControl touchesEnded:withEvent:] + 604
frame #14: 0x212beb9e UIKit`-[UIWindow _sendTouchesForEvent:] + 2094
frame #15: 0x212b9ade UIKit`-[UIWindow sendEvent:] + 2798
frame #16: 0x2128b682 UIKit`-[UIApplication sendEvent:] + 308
frame #17: 0x21a1ede6 UIKit`__dispatchPreprocessedEventFromEventQueue + 2254
frame #18: 0x21a1978a UIKit`__handleEventQueue + 4186
frame #19: 0x21a19b6c UIKit`__handleHIDEventFetcherDrain + 144
frame #20: 0x1c01bfdc CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION__ + 12
frame #21: 0x1c01bb04 CoreFoundation`__CFRunLoopDoSources0 + 424
frame #22: 0x1c019f50 CoreFoundation`__CFRunLoopRun + 1160
frame #23: 0x1bf6d1ae CoreFoundation`CFRunLoopRunSpecific + 470
frame #24: 0x1bf6cfd0 CoreFoundation`CFRunLoopRunInMode + 104
frame #25: 0x1d717b40 GraphicsServices`GSEventRunModal + 80
frame #26: 0x212eee12 UIKit`UIApplicationMain + 150
frame #27: 0x1b75a4ea libdyld.dylib`start + 2
(lldb)
我清除了之前在手機上測試過的所有應用。 我還嘗試了上個月備份的應用程序版本,以消除自從我開始使用deviceMotion
以來可能引入的任何問題。 但是問題仍然存在。
有人看到過這樣的東西嗎? 我將從哪里開始? 例如,像我在哪里放置斷點?
此檢查不正確。
if (!self.seconds)
{
[self.seconds removeFromSuperview];
self.seconds = [[ClockButton alloc] loadClockButton:(NSUInteger)clockCount];
[self addSubview:_seconds];
}
如果是布爾值,則可以使用!self.seconds。 在這種情況下,self.seconds似乎是一種視圖。 因此,您應該做的是:
if (self.seconds!=nil) {
[self.seconds removeFromSuperView];
self.seconds = [[ClockButton alloc] loadClockButton:(NSUInteger)clockCount];
[self addSubview:_seconds];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.