Xcode 4とコアデータ:SQLデバッグを有効にする方法


102

私はユニバーサルiOSアプリで作業しており、デバッグしているときにログに生のSQLを表示したいと思います。このブログの投稿には、iOSコアデータ開発で生のSQLロギングを有効にする方法に関する情報がいくつかあります。与えられた例はXcode 3のためのものであり、Xcode 4でこれを有効にする方法は私には明確ではありません。

「製品」->「スキームの編集」を試し、「- com.apple.CoreData.SQLDebug 1」を「起動時に渡される引数」に追加しましたが、ログに何も出力されません。私が間違った場所を探しているのか、単に引数を誤って渡していないのかわかりません。


1
これをありがとう。私の主な問題は、現在検索しているテーブルの行数が74,000行を超えており、クエリが実行されている時間を把握したかったのです。多くの抽象化が行われているという事実を尊重しますが、私は内部で何が行われているかについて本当に暗闇にありました。これは少なくとも私に少しだけ役立ちます。
オルダーズ2011

制限を理解している限り、特にパフォーマンスの調整のために、生のSQLを確認することは問題ありません。問題が発生するのは、生のSQLを見て、オブジェクトグラフがどのように動作しているかを理解しようとする場合です。2つの間に直接の関係がないので、それはそれらを迷わせます。
TechZen 2011

回答:


150

NSLOGSを取得するのと同じ場所を見る必要があります

そして、製品->スキームの編集->左側のパネルからRun YOURAPP.appを選択し、メインパネルの引数タブに移動します。

そこで、起動時に渡される引数を追加できます。

追加する必要があります-com.apple.CoreData.SQLDebug 4(1から4までの数値を指定すると、数値が大きいほど詳細になります)

OKを押すと、すべての設定が完了します。

ここで重要なのは、テストに使用するスキームを編集することです。


8
これをありがとう。私はここの回答の1に見るようにターンが出て、限りシミュレータが行くように、私の引数のフォーマットが間違っていたstackoverflow.com/questions/822906/... 私はの引数を渡す必要があり-com.apple.CoreData.SQLDebugを SQL出力を表示するには、2番目の引数を1に設定します。
オルダース

2
データベースに渡される引数を出力する方法についての考えはありますか?このアプローチは、クエリが構造化されている方法を見て、それはのように、唯一のSQL文を印刷するには罰金を働きUPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?、本当にデータが送られているかを見るために非常に有用ではありません
フェリペ・サビノ

実は、私は本当のSOの質問として、それを追加する方が良いだろうと思った;)stackoverflow.com/questions/12306343/...
フェリペサビノ

他のケースではなくデータベースに挿入した場合にのみログを記録できる方法はありますか?
Bishal Ghimire

@BishalGhimireわからない、どこかでイベントでフィルタリングできます。テキストフィルタリングを使用して出力を直接フィルター処理します。
Nicolas S

20

XCode 4

NSZombieEnabledを管理しているのと同じ場所にある

製品->スキームの編集-> YouApp.appデバッグの実行

「起動時に渡される引数」の下に、正確に貼り付けます。

-com.apple.CoreData.SQLDebug 1

警告-これは非常に冗長です。CoreDataの問題が発生している場合、これは一見の価値があるかもしれませんが、間違った情報について必要以上の情報になる可能性もあります。


ユーザーがログファイルをアップロードできるように、この-com.apple.CoreData.MigrationDebug 1を文字列ファイルに印刷する方法
rhlnair

5

私はこれに問題を抱えていて、それが愚かな脱落であることに気づきました。に引数を入力したときXcode (4.3.1)、先頭のハイフンを省略しました。コマンドラインで入力した場合はそうしなかったでしょうが、GUIでは省略しました。(いくつかの投稿が示唆したように)2つの別々の引数で入力するか、1つで入力するかの違いは見つかりませんでした。だから使用:

-com.apple.CoreData.SQLDebug 1

単にではない:

com.apple.CoreData.SQLDebug 1

それはシミュレータと実際のデバイスの両方で私のために働いた


3

渡される値のさまざまなレベルを入力できることに注意してください。より多くの冗長性を提供します。

-com.apple.CoreData.SQLDebug 1
-com.apple.CoreData.SQLDebug 2
-com.apple.CoreData.SQLDebug 3
-com.apple.CoreData.SQLDebug 4 // This will actually show parameter binds ("?")
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.