我有代碼通過以設定的時間間隔更改其顏色來閃爍集合視圖中單元格的邊框。當閃爍序列開始時,單元格的原始顏色被保存,這樣當閃爍序列完成時,顏色可以恢復。發生的崩潰并不能準確解釋問題所在,因此我只能嘗試推斷問題,而我在除錯器中看到的內容沒有多大意義。
請注意,這是過去經過測驗可以正常作業而不會崩潰的代碼,不知道為什么它現在突然失敗了。
錯誤:( Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1831e1fd4)該行顯示為紅色,執行將不會繼續,所以不,這不僅僅是在斷點處停止,而是崩潰。)
編碼...
@interface OrderCollectionViewCell : UICollectionViewCell
. . .
@property (strong, nonatomic) NSTimer *borderTimer;
@property (nonatomic) BOOL blinkStatus;
@property (nonatomic) NSInteger blinkTimes;
. . .
@implementation OrderCollectionViewCell
{
CGColorRef normalBorder;
}
-(void)flashBorder
{
// Save original color for later restore
normalBorder = self.bg.layer.borderColor;
if(self.borderTimer) {
[self.borderTimer invalidate];
}
self.borderTimer = [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(blink) userInfo:nil repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.borderTimer forMode:NSRunLoopCommonModes];
self.blinkTimes = 0;
self.blinkStatus = NO;
}
-(void)blink
{
if (self.blinkTimes == 3)
{
// Sequence complete. Restore original color
self.bg.layer.borderColor = normalBorder; // <-- This line crashes
[self.borderTimer invalidate];
self.borderTimer = nil;
return;
}
if(self.blinkStatus == NO){
self.bg.layer.borderColor = [UIColor whiteColor].CGColor;
self.blinkStatus = YES;
}else {
self.bg.layer.borderColor = [UIColor orangeColor].CGColor;
self.blinkStatus = NO;
}
}
這就是事情變得奇怪的地方。根據
請注意,每個的地址都報告為<CGColor 0x281b6d200>,這更像是物件行為而不是結構行為。
當需要恢復顏色時,變數normalBorder似乎不再包含有效的顏色資料,因為它只是報告為地址(與以前的地址相同)但沒有描述性輸出:

有誰知道可能導致此失敗的原因,或者為什么在除錯器中CGColorRef似乎表現得像一個物件而不是一個結構?
uj5u.com熱心網友回復:
正如您已經猜到的那樣,“normalColor”在您訪問它時不再是有效的參考。我認為檔案中存在錯誤或溝通不暢,因為 CGColorRef 實際上是從 CFTypeRef 派生的,而不是結構。我建議您將屬性中的顏色保存為 UIColor 物件。這將解決您的問題。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/524215.html
標籤:IOS目标-c碰撞
