開發(fā)中遇到的問題集結(jié)

問題1:AFNetwork數(shù)據(jù)沒有更新回調(diào) statuCode(304)問題

最近在做項目中緩存的問題以及錯誤處理的問題,我思路是使用ETag(不知道的可以百度一下 就是一個是否更新機制 大致原理:在第一次請求該接口數(shù)據(jù)的時候服務(wù)器會返回一個ETag值給你,你需要保存到數(shù)據(jù)庫,以后請求該接口時要在請求頭中添加未過期的ETag值)進行判斷數(shù)據(jù)庫首先從數(shù)據(jù)庫獲取數(shù)據(jù),如果有數(shù)據(jù)并且不過期就顯示。然后不管是否有數(shù)據(jù)就開始進行網(wǎng)絡(luò)請求,在請求頭Header中添加一個IF-None-Match字段,這個字段的值就是你在第一次請求時返回的ETag值,服務(wù)器會根據(jù)你傳入的ETag進行判斷是否有數(shù)據(jù)更新,如果沒有更新就不返回數(shù)據(jù),錯誤代碼StatusCode為304 。這個時候問題來了,由于我使用的是AFN請求,封裝了一個底層的GET和Post請求,在底層GET方法中打印StatusCode:一直為200 縱使我傳入了ETag也沒有過期,我找了很多的地方,并沒有發(fā)現(xiàn)自己代碼有問題,到最后我新建了一個新的project做測試,發(fā)現(xiàn)并沒有問題,然后我做了對比,發(fā)現(xiàn)是字典參數(shù)的問題,之前我是直接將從外界傳入的字典放入到GET請求中,這樣就一直為200,當我重新定義個字典然后將傳入的字典加入到重定義的字典中,然后在傳入到GET請求,發(fā)現(xiàn)返回就正常了 錯誤號為StatusCode:304 沒有數(shù)據(jù)更新。我目前還不知道什么原因,過段時間在解決什么原因吧,希望知道的告訴一聲。

解決:最近花時間解決了這個問題,原來是由于對AFN不夠了解導致的,因為AFN有緩存機制,AFN會把304作為200進行返回,這就導致了不能返回304的問題,所以我就取消了AFN自動緩存具體代碼如下:


// AFN會自動把304也當成200返回了,設(shè)置下面會讓AFN忽略緩存,從而正確返回304
 [manager.requestSerializer setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

至于修改字典參數(shù)的問題,估計是AFN出了問題導致的。

問題2: 接受通知(NSNotificationCenter)多次

#介紹:

 由于我的項目是醫(yī)生對患者的管理,所以當監(jiān)聽到患者綁定和解綁醫(yī)生的時候都會發(fā)送通知,到患者管理列表頁(patientsController:屬于tabbarController的第二個控制器).

問題:當監(jiān)聽患者綁定醫(yī)生的時候,接受到了3次或四次的CHNotification_refreshPatients通知;
我是在viewdidload中注冊的通知,在dealloc中remove的通知。

解決:找了一些技術(shù)論壇:有兩種答案:
1.在init中注冊通知,在delloc中移除通知。(很多人都是這么干,嘗試后無效)
2.在viewwillappear中注冊通知,在viewwilldisappear中移除通知。(嘗試有效,部分人使用此方式)

最終解決:最后發(fā)現(xiàn)接受到多次通知的原因是因為循環(huán)引用,導致控制器不釋放,每進入一次控制器就回監(jiān)聽一次通知??刂破鞑会尫牛O(jiān)聽也就不會釋放。所以當事件觸發(fā)時就會執(zhí)行多次。遇到同樣問題的朋友。一定要查看控制器是否成功釋放。

問題3:在

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

的代理方法中調(diào)用

[self.tableview setContentOffset:CGPointMake(0,  667) animated:YES];

方法無效?

解決方案:
在異步的主線程中做offset的設(shè)置。
如下:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
      dispatch_async(dispatch_get_main_queue(), ^{
                [UIView beginAnimations:nil context:nil];
                [UIView setAnimationDuration:2];
                [self.tableview setContentOffset:CGPointMake(0, 667 ) animated:YES];
                [UIView commitAnimations];
      });
}

問題4: 判斷nsindexpath是否相等出錯

介紹:在做nsindexpath 判斷是否相等的時候 我使用了indexpath1 == indexpath2 去判斷是否相等。

這種方法是錯誤 因為是兩個地址塊 永遠不會相等。
解決:
1.使用compare:經(jīng)過測試是不可取的因為一旦其中一個indexpath為nil就會返回nil就無法判斷
2.通過nsobject的判斷相等方法(isequal:)進行判斷方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容