プロジェクトで ParseKit を使用しようとしています。文法を正しく定義したと思いますが、その文法をテスト文字列で使用しようとするたびに、コンソール内にログが表示され、クラッシュします。
p: (null) * -[__NSArrayM insertObject:atIndex:]: オブジェクトを nil にすることはできません
とはどういう意味ですか? 私が間違っていることは何ですか?
プロジェクトで ParseKit を使用しようとしています。文法を正しく定義したと思いますが、その文法をテスト文字列で使用しようとするたびに、コンソール内にログが表示され、クラッシュします。
p: (null) * -[__NSArrayM insertObject:atIndex:]: オブジェクトを nil にすることはできません
とはどういう意味ですか? 私が間違っていることは何ですか?
ParseKit の開発者はこちら。あなたが私に送ってくれたあなたの文法の問題を見つけることができました(オフサイト)。
問題は次の行にあります。
optionalWhere = empty | 'WHERE' comparisons;
ここに「空」があるはずですEmpty
。
組み込みの ParseKit パーサーはすべて大文字で、次のようになりますEmpty
。
そこを直せば大丈夫です。
今後このような問題を見つけて修正するには、ParseKit プロジェクトで「doTestGrammar」をグローバル検索します。
そのメソッドで、既存の文法を独自の文法に置き換えます。次に、ブレークポイントをオンにして、デバッグ モードで「DebugApp」ターゲットを実行します。これはあなたをクラッシュに導きます。そこから、最後に呼び出されたパーサー コールバックまでスタック トレースをバックアップし、PKAssembly
そのパーサー コールバック メソッドに送信されたメソッドを引数として出力します。印刷のコンソール出力PKAssembly
は、バグのある文法の行を示します。この場合、次のとおりでした。
[] /empty/ /|/ /'WHERE'/ /comparisons^
今後の問題のデバッグに役立つことを願っています。