你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 關於運用JSPatch重寫setter辦法

關於運用JSPatch重寫setter辦法

編輯:IOS開發綜合

本博客遷移來自:http://www.jianshu.com/users/465865c268ed/latest_articles
明天快上班時APP呈現一個bug,是由於數組越界形成的,在依據月份去判別當月有幾周時接口那邊多前往了一周(原本五周前往了六周),招致數組越界。由於是先填寫周再查詢,這個解體是崩在查詢裡(所以一定是填寫時周數算法出錯),所以也不清楚是安卓端的算法出錯還是PC端的算法出錯,但我能很一定不是IOS端的錯誤(實力甩鍋)。仔細反省了我的算法,發現依據月份計算周數並沒有問題,然後安卓那邊也反省了一遍,也沒有問題。這時剛想把鍋甩給PC端,PC端的童鞋也說算法沒問題。。登時沒人接鍋了啊。。。但解體的是我IOS端啊(安卓有萬能的try catch大法使它不崩啊)。好吧,無法背鍋吧。。。好在我們有萬能的JSPatch,還不至於要發一個新的版原本處理這麼一個小問題。
觸及到這個算法的頁面還挺多的(封裝的不夠),假如觸及到得每個辦法都用JSPatch重寫一遍的話工程量也太大了。這裡我在想有沒有什麼與日俱增的辦法呢,從數據的源頭動手處理而不不修正下游數據的處置算法。恩,那就從接口獲取數據轉model時開端吧,沒錯,重寫setter辦法。由於獲取到得是一個數組,那麼很顯然,重寫model中week這個數組的setter辦法。
前幾天在swift代碼中也這麼干過http://www.jianshu.com/writer#/notebooks/2806206/notes/6736829
明天出錯的是OC代碼,針對

setModel : function(model){
    _model = model
}

代碼_model = model的處置時,我事先從JSPatch的issue中看到有人說運用 self.ORIGsetModel(model)即可,事先也沒有驗證,就不斷這麼用。前幾地理章中提到的修復Swift代碼bug中也是這麼用的卻沒有呈現什麼問題,但明天我用的時分發現了一個很嚴重的問題,就是JS代碼在走到 self.ORIGsetModel(model)這個辦法時,它忽然去調用原生原來的辦法了(那就等於白寫了這個辦法。
其實問題就出在明天的setter辦法中我是要先對數據停止處置然後再賦值給_model,而之前和昨天的代碼中我是無需對model先處置的,一下去先運用self.ORIGsetModel(model)辦法,它調用原生辦法後對前面我添加的辦法並沒有影響。。。。。先上明天的代碼吧。

defineClass('WGMonthlyReportModel',{


    setWeek: function(week) {
    var viewModel = WGMonthPlanWriterViewModel.alloc().init();
    var weekCount = viewModel.calculateAmountWeekForThisMonth();
    var arrCount = week.count();
    var index = 0;
    for (index = 0; index < arrCount; index++) {
        var weekModel = week.objectAtIndex(index);
         var ID = weekModel.ID().integerValue();
        if (ID >= weekCount) {
            weekModel.setID(weekCount);
        }
    }

    if (week.count() > weekCount) {
        var weeArr = NSMutableArray.alloc().init();
        var i = 0;
        for (i = 0; i < arrCount - 1; i++) {
             var weekModel = week.objectAtIndex(i);
             weeArr.addObject(weekModel);
        }
        //正文的是出錯的代碼
       //  self.ORIGsetWeek(weeArr);
       self.setValue_forKey(weeArr,"_week");
        return;

    }


     //正文的是出錯的代碼
     //self.ORIGsetWeek(week);
      self.setValue_forKey(week,"_week");
}
},{});

經過代碼很清楚的知道,我對week數組先處置了一同,然後又運用self.ORIGsetWeek(week)想完成”_week = week”的運用,殊不知此時已調用了原生的setter辦法掩蓋了後面寫的一捅。固正確的辦法應該是運用“ self.setValue_forKey”辦法完成“_week = week”,比方“ self.setValue_forKey(week,”_week”)”,修正之後完滿處理,愉快的通知運營的同事:“bug已處理”!(自己接的鍋,含淚也要背著啊)。
不斷以來犯的錯誤,明天才猛然發現(其實“ORIG”幾個字眼分明就該想到是調用先前的辦法啊,我傻了我,還糾結這麼久)。。。。記載一下,提示自己下次細心點。

【關於運用JSPatch重寫setter辦法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved