Xcode 4 और कोर डेटा: SQL डीबगिंग को सक्षम कैसे करें


102

मैं एक सार्वभौमिक iOS ऐप पर काम कर रहा हूं और जब मैं डिबगिंग कर रहा हूं तो मैं कच्चे SQL को लॉग में देखना चाहूंगा। इस ब्लॉग पोस्ट में कुछ जानकारी है कि iOS कोर डेटा डेवलपमेंट के लिए रॉ SQL लॉगिंग कैसे सक्षम करें। दिया गया उदाहरण Xcode 3 के लिए है और यह अभी मेरे लिए स्पष्ट नहीं है कि इसे Xcode 4 में कैसे सक्षम किया जाए।

मैंने "उत्पाद" -> "योजना संपादित करें" की कोशिश की है और " -com.apple.CoreData.SQLDebug 1 " को "लॉन्च पर पारित तर्क" में जोड़ा है , लेकिन मैं अभी भी लॉग में कोई आउटपुट नहीं देख रहा हूं। यकीन नहीं होता कि मैं गलत जगह देख रहा हूं या सिर्फ गलत तरीके से दलीलें दे रहा हूं।


1
इसके लिए धन्यवाद। मेरा मुख्य मुद्दा यह है कि मैं जिस टेबल पर खोज कर रहा हूं, उसमें अभी 74,000 पंक्तियां हैं और मैं यह जानना चाहता था कि प्रश्न कितने लंबे समय से चल रहे हैं, क्योंकि यह अभी काफी धीमा है। मैं इस तथ्य का सम्मान करता हूं कि बहुत सारी अमूर्तता चल रही है, लेकिन मैं वास्तव में इस बारे में अंधेरे में था कि हुड के नीचे क्या चल रहा है। यह कम से कम मुझे बस थोड़ी सी मदद करता है।
oalders

जब तक आप सीमाओं को समझते हैं, कच्चे एसक्यूएल को देखना ठीक है, खासकर प्रदर्शन के लिए। जहां लोग मुसीबत में पड़ जाते हैं, वे यह जानने की कोशिश कर रहे हैं कि कच्ची एसक्यूएल को देखकर वस्तु का ग्राफ कैसा चल रहा है। चूंकि दोनों के बीच कोई सीधा संबंध नहीं है, यह सिर्फ उन्हें भटकाता है।
टेकजेन

जवाबों:


150

आपको उसी जगह को देखना चाहिए जहां आपको NSLOGS मिलता है

और आपको उत्पाद पर जाना चाहिए -> योजना संपादित करें -> फिर बाएं पैनल से Run YourAPP.app चुनें और मुख्य पैनल के आर्ग्यूमेंट टैब पर जाएं।

वहाँ आप लॉन्च में एक आर्ग्युमेंट पास्ड ऑन जोड़ सकते हैं।

आपको जोड़ना चाहिए -com.apple.CoreData.SQLDebug 4(1 और 4 के बीच संख्या, उच्च संख्या इसे और अधिक क्रिया बनाती है)

प्रेस ठीक है और आपके सभी सेट हैं।

यहां कुंजी उस योजना को संपादित करना है जिसका आप परीक्षण के लिए उपयोग कर रहे हैं।


8
इसके लिए धन्यवाद। बाहर जाता है, जहां तक ​​सिम्युलेटर जाता है, मेरे तर्कों का प्रारूप गलत था क्योंकि मैं यहां एक उत्तर में देखता हूं stackoverflow.com/questions/822906/… मुझे -com.apple.CadData.SQLDebug का एक तर्क पारित करने की आवश्यकता है और SQL आउटपुट देखने के लिए 1 का दूसरा तर्क ।
oalders

2
डेटाबेस पर पारित होने वाले तर्कों को कैसे प्रिंट किया जाए, इस पर कोई विचार? यह दृष्टिकोण यह देखने के लिए ठीक काम करता है कि क्वेरी को कैसे संरचित किया जा रहा है, लेकिन यह केवल sql स्टेटमेंट को प्रिंट करता है, जैसे UPDATE ZTABLE SET ZCOLUMN = ? WHERE ZID = ?और यह वास्तव में यह देखने के लिए बहुत उपयोगी नहीं है कि क्या डेटा भेजा जा रहा है
फेलिप सबिनो

वास्तव में, मुझे लगा कि इसे वास्तविक SO प्रश्न के रूप में जोड़ना बेहतर होगा;) stackoverflow.com/questions/12306343/…
फेलिप सबिनो

वहाँ किसी भी तरह से मैं केवल तभी लॉग इन कर सकता हूं जब यह डेटाबेस में सम्मिलित होता है अन्य मामले के लिए नहीं?
बिशाल घिमिरे

@BishalGhimire मुझे यकीन नहीं हो रहा है, हो सकता है कि आप कहीं न कहीं घटना को फ़िल्टर कर सकें। मैं टेक्स्ट फ़िल्टरिंग का उपयोग करके सीधे आउटपुट को फ़िल्टर करूंगा।
निकोलस एस

20

XCode 4

यह उसी जगह है जहां मैं अपने एनएसजॉम्बी को सक्षम करता हूं

उत्पाद -> योजना संपादित करें -> YouApp.app डीबग चलाएँ

"लॉन्च पर पारित तर्क" के तहत, बिल्कुल इसमें पेस्ट करें:

-com.apple.CoreData.SQLDebug १

चेतावनी - यह सामान बहुत क्रियात्मक है, यदि आप कोर डेटा समस्याएँ हैं, तो यह अच्छी तरह से देखने लायक हो सकता है, लेकिन यह गलत जानकारी के बारे में आपकी आवश्यकता से अधिक जानकारी भी हो सकती है।


किसी भी तरह से इसे प्रिंट करने के लिए -com.apple.CoreData.MigrationDebug 1 को स्ट्रिंग फ़ाइल पर, ताकि उपयोगकर्ता लॉग फ़ाइल
rhlnair

5

मुझे इससे समस्या हो रही थी और तब एहसास हुआ कि यह एक मूर्खतापूर्ण चूक थी, जो मुझे लगता है कि आप में से कुछ के लिए एक हास्यप्रद गलती है। जब मैंने तर्क में प्रवेश किया Xcode (4.3.1), तो मैंने अग्रणी हाइफ़न को छोड़ दिया। मैंने ऐसा नहीं किया होगा, मैं इसे कमांड लाइन पर दर्ज कर रहा था, लेकिन जीयूआई में मैंने इसे छोड़ दिया था। मुझे 2 अलग-अलग आर्ग या एक में प्रवेश करने के बीच कोई अंतर नहीं मिला (जैसा कि कुछ पदों ने सुझाव दिया था)। तो उपयोग करें:

-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 ("?")
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.