3

このコードは Phonegap Code: IAP Plugin からのものです。「送信されたjs」の直後のコード行でエラーが発生します。関数に送信されるすべての要素は、最後の 'nil' を除いて非 nil です。ログアウトして、送信されたことを確認しました。このコードはプラグイン ( https://github.com/usmart/InAppPurchaseManager-EXAMPLE ) からそのまま出てきたもので、ロギング以外は変更されていません。デバッガーでは、どのオブジェクトも nil ではないことがわかったので、エラーが発生する理由がわかりません。

エラーは次のとおりです。

[__NSArrayI JSONRepresentation]: 認識されないセレクターがインスタンス 0xdc542d0 に送信されました 2013-02-13 23:26:17.209 GoblinSlots[4519:707] *キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了します。理由: '-[__NSArrayI JSONRepresentation]: 認識されないセレクターが送信されましたインスタンス 0xdc542d0' へ

コードは次のとおりです。

      - (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:   (SKProductsResponse *)response
      {
        NSLog(@"got iap product response");
        for (SKProduct *product in response.products) {
            NSLog(@"sending js for %@", product.productIdentifier);
            NSLog(@"  title %@", product.localizedTitle );
            NSLog(@"  desc%@ - %@", product.localizedDescription, product.localizedPrice );


NSArray *callbackArgs = [NSArray arrayWithObjects:
                                 NILABLE(product.productIdentifier),
                                 NILABLE(product.localizedTitle),
                                 NILABLE(product.localizedDescription),
                                 NILABLE(product.localizedPrice),
                                 nil ];
        NSLog(@"sent js");

        NSString *js = [NSString stringWithFormat:@"%@.apply(plugins.inAppPurchaseManager, %@)", successCallback, [callbackArgs JSONSerialize]];
        NSLog(@"js: %@", js);
        [command writeJavascript: js];
    }
4

2 に答える 2

3

JSON シリアライゼーションを行うためのすべての機能は、Cordova プラグインに既に含まれているようです。さらに別の JSON ライブラリをダウンロードしてインストールする必要はありません。(a)

PhoneGap は SBJson から JSONKit に切り替えているようです。(ロ)

PhoneGap は、すべての JSON メソッドを "cdvjk_" プレフィックスを使用するように変更中です。(c)

私の知る限り、これらの変更中に何かがうまくいきませんでした。私がしたことは、ファイル Plugins/InAppPurchaseManager.m を編集して、次の変更を加えたことです。

  • 行を追加

#import <Cordova/CDVJSON.h>

  • ラインを交換する

return [self respondsToSelector:@selector(cdvjk_JSONString)] ? [self cdvjk_JSONString] : [self cdvjk_JSONRepresentation];

return [self JSONString];

. (これまたはより良いバグ修正を素敵な PhoneGap の人々にプッシュする正しい方法は何ですか?)

于 2013-03-02T02:38:25.543 に答える
1

JSONRepresentation追加するカテゴリなので、それを使用するクラスSBJsonに含める必要があります。SBJson.h

于 2013-02-14T08:26:02.867 に答える