一句話筆記,某段時間內遇到或看到的某個可記錄的點。 2017-03-14
- 注意 某些方法的 執(zhí)行順序
- UITapGestureRecognizer 點擊事件偶爾失效
- [NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class 錯誤
- 設置同一個色值時,顯示顏色卻不同 ?
- 什么情況下讀取 [AccountManager sharedManager].accountModel.userID 會為空
一、注意 某些方法的 執(zhí)行順序
if (self.testBlock) {
self.testBlock();
}
[self dismissViewControllerAnimated:YES completion:^{}];
[self dismissViewControllerAnimated:YES completion:^{
if (self.testBlock) {
self.testBlock();
}
}];
[self dismissViewControllerAnimated:YES completion:^{}];
if (self.testBlock) {
self.testBlock();
}
上述三者在執(zhí)行某個問題時,也許效果一樣,第二種會有點卡頓,第一種和第三種基本一樣,但是一定注意第一種的執(zhí)行順序,有時這樣寫會遇到某種意想不到的BUG,可能外部調用時也會寫 [self dismissViewControllerAnimated:YES completion:^{}];
, 但是實際上可能的是 那個 self 還沒有被釋放掉,而導致問題啦。
另外注意 第二種和第三種的方法不一樣,至于使用哪一種看具體需求情況。
dismissViewControllerAnimated:
畢竟這個Block 里面的執(zhí)行時間是在 viewDidDisappear 之后的。
二、UITapGestureRecognizer 點擊事件偶爾失效
在某個界面直接添加 UITapGestureRecognizer 發(fā)現(xiàn)其偶爾會失效,而且這個概率還比較高,但一時確實找不到原因。。。
后來發(fā)現(xiàn)是其實是我點擊錯了,想想以后遇到改問題不要死扣。。。
另外,也要注意常規(guī)失效的情況:
- 父視圖的 userInteractionEnabled 交互事件沒有開啟
- 子視圖超出父視圖的范圍
- 設置 UITapGestureRecognizer 的代理事件中進行了阻攔
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch { if () { return NO; }
}
>#####三、[NSKeyedUnarchiver decodeObjectForKey:]: cannot decode object of class 錯誤

其實從圖片中打印的信息就可以直接 看出來,指的是無法解碼, 因為某個 Key 不存在,在我們此處 CategoryModel == > GBCategoryModel 導致出錯的,對于此類問題場景應該是改動歸檔啦,所以有兩種解決方法:
* 當例如 CategoryModel == > GBCategoryModel 切換后,直接先刪除該路徑
* 或者 說對之前 CategoryModel 此處做兼容處理。
PS: 以前對這類問題,會有點懵,最近發(fā)現(xiàn)對這種問題,其實只要細細看打印出的消息,看懂了基本上解決了一大半。
>#####四、設置同一個色值時,顯示顏色卻不同 ?
這個問題是在 我設置一個線條顏色 和 字體顏色時,設置同一種顏色,卻是現(xiàn)實顏色不一樣,不知道啥情況,很是郁悶...

就例如上述,給的都是同一個色值,但是展示的效果卻是不一樣。
self.testView.backgroundColor = [UIColor orangeColor];
self.testLabel.textColor = [UIColor orangeColor];
暫時想到一個取巧的方法, 從色覺效果看上去會是接近一些的
self.testView.backgroundColor = [[UIColor redColor] colorWithAlphaComponent:0.9];
self.testLabel.textColor = [UIColor orangeColor];
但是木有正規(guī)理由,如有朋友有正確的方法設置,讓其顯示的從色值上一樣,歡迎告知。
PS: 這個問題在 模擬器上測試特別明顯,在真機上差距會小一些。
>#####五、什么情況下讀取 [AccountManager sharedManager].accountModel.userID 會為空
這個問題是我們后臺突然跑過來說,我們某個接口的 userId 傳入的是空,然而我很意外的是我們此處只有登錄狀態(tài)下才會跑這個接口,同時我們都是直接讀取的 [AccountManager sharedManager].accountModel.userID 的值,為什么會為空?
正常跑的情況下,跑到那個接口處已經(jīng)經(jīng)歷幾個接口才到那,而前面的幾個接口必然也要傳 userID,而到那接口時,是突然的讀取該值失敗。 或者是說,有人惡意單獨跑這個接口。
然后下面好好想想,什么情況下會讀取值失敗,而且是突然的
* 第一反應是崩潰的情況下,然而應該不是,否則數(shù)據(jù)不能上傳到后臺
* 第二,在想這個值是怎樣保存的,發(fā)現(xiàn)是 NSCoding 實現(xiàn)的 也應該是沒有問題的
暫時一下確實沒有想到什么情況下,會突然讀取不到該值的情況 ? 如有朋友知道麻煩告知。