JSPatchを使って熱補修します.

4674 ワード

JSPatchは何ですか
公式文書の第一段を借りてください.
JSPatchはオープンソースのプロジェクトで、プロジェクトに極小のエンジンファイルを導入するだけで、JavaScriptを使って任意のObjective-Cの原生インターフェースを呼び出して、任意のObjective-C原生方法を置き換えることができます.現在は主にJSスクリプトを元のObjective-Cコードに置き換え、オンラインバグをリアルタイムで修復するために使用されています.band 590
JSPatch使用中のピット
CATCHの2.4.0の中で私達は初めてこのフレームに加入しました.今日は正式に使ってみました.JSpatch機能の強さは多言ではなく、ここで使用中に発生した問題を記録します.
View Controller
JSPatchでcontrollerを修復する時は必ず加えます.または書き換えます.この二つの方法は修復の必要がないとしても、Willapearの時とwilldisappearの時に崩壊します.
  defineClass('ViewController', {
        viewWillAppear: function(animated) {
        self.super().viewWillAppear(animated);
        //balabala...
        },
        viewWillDisappear: function(animated) {
        self.super().viewWillDisappear(animated);
        //balabala...
        },
        });
可変パラメータ
もともと解決したい問題は簡単で愚かです.AlertViewというのがあります.
WS(weakSelf);
CATAlertView* alert = [[CATAlertView alloc] initWithTitle:@"  " Message:@"        ,      。" Hidden:NO touchBlock:^(id sender, NSInteger index) {
    UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Order" bundle:nil];
    CATPaymentViewController* viewController = [storyboard instantiateViewControllerWithIdentifier:@"CATPaymentViewController"];
    viewController.order = weakSelf.order;
    [weakSelf.navigationController pushViewController:viewController animated:YES];
} cancelButtonTitle:@"  " andButtonsTitles:@"  ", nil];
[alert show];
touch Blockで判断が足りませんでした.
if(index == 1){
}
キャンセルボタンをクリックしても応答が発生します.簡単で愚かですか?ha?このバグを報告された後、私は適当にfixを落としたいと思いました.jsを試して修理してみたらいいと思いました.実践してみてください.乾いたら大丈夫です.二秒で修復コードを作成します.
WS(weakSelf);
CATAlertView* alert = [[CATAlertView alloc] initWithTitle:@"  " Message:@"        ,      。" Hidden:NO touchBlock:^(id sender, NSInteger index) {
    if(index == 1){
        UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Order" bundle:nil];
        CATPaymentViewController* viewController = [storyboard instantiateViewControllerWithIdentifier:@"CATPaymentViewController"];
        viewController.order = weakSelf.order;
        [weakSelf.navigationController pushViewController:viewController animated:YES];
    }
} cancelButtonTitle:@"  " andButtonsTitles:@"  ", nil];
[alert show];
二秒は著者が提供する変換器JSPatch Covertorを利用してJSコードに変換します.
require('CATAlertView,UIStoryboard');
WS(weakSelf);
var alert = CATAlertView.alloc().initWithTitle_Message_Hidden_touchBlock_cancelButtonTitle_andButtonsTitles("  ", "        ,      。", NO, block('id,NSInteger', function(sender, index) {
            var storyboard = UIStoryboard.storyboardWithName_bundle("Order", null);
            var viewController = storyboard.instantiateViewControllerWithIdentifier("CATPaymentViewController");
            viewController.setOrder(weakSelf.order());
            weakSelf.navigationController().pushViewController_animated(viewController, YES); 
            }),"  ", "  ", null);
alert.show();
二秒で文法エラーを修正してください.例えばこれです.
WS(weakSelf);
変更が必要です.
var weakSelf = __weak(self);
そして、変換されたJSコードの中でif(index==1)をなくしてしまいました.ここにも追加が必要です.つまり、最後に入手したJSコードはこうです.
require('CATAlertView,UIStoryboard');
var weakSelf = __weak(self);
var alert = CATAlertView.alloc().initWithTitle_Message_Hidden_touchBlock_cancelButtonTitle_andButtonsTitles("  ", "        ,      。", NO, block('id,NSInteger', function(sender, index) {
            if(index == 1){
               var storyboard = UIStoryboard.storyboardWithName_bundle("Order", null);
                var viewController = storyboard.instantiateViewControllerWithIdentifier("CATPaymentViewController");
             viewController.setOrder(weakSelf.order());
                weakSelf.navigationController().pushViewController_animated(viewController, YES);
            }
            }),"  ", "  ", null);
alert.show();
そして実行して、このコードを実行して、予想外に崩壊しました.崩壊点はalertview処理から伝わってきたother ButonTitleにあります.(すみません、この場所はスクリーンショットを忘れて登録しました.THANKSGODは自分でカプセル化しました.alertViewは私たちが崩壊点に位置しやすくなりました.そうしないと、赤いBADUXXXXです.絶えずにコードを検討して、資料を調べてからやっと公式wikiで言及したこの点を発見しました.
JSPatchでは「NSString string WithFormat:@」の呼び出しがサポートされていません.これはパラメータの数可変方法であり、JSPatchの原理はNSInvocationを通じて動的に起動する方法です.NSInvocationは可変パラメータをサポートしていません.公式文書を参照してください.
終わります
...
...
...
...
...
...
...
...
...
……という設定はありません.
だから、子曰は、フレームを使う時、その原理を研究する良い習慣を身につけます.