2009-12-11 16 views
6

मैं NSPersistentStoreCoordinator पर एक साधारण addPersistentStore कर रहा था, और यह & त्रुटि कोड उत्पन्न हुआ।एनएसएलओजी, एनएसईआरआरआर, खराब पहुंच

तो मैं यह NSLog के लिए गया था, और जब मैं ऐसा किया एक पहुँच त्रुटि मिली:

NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 

जो आम मुहावरा हो रहा है।

जब मैं त्रुटि बयान पुन: स्वरूपित इस प्रकार है:

 NSLog(@"Unresolved error %@", [error userInfo]); 

... समस्या दूर चला गया।

यहां तक ​​कि NSZombie ने भी खराब पहुंच त्रुटि को सही तरीके से नहीं फंसया!

कोई विचार?

उत्तर

18

आप त्रुटि को कैसे पकड़ रहे हैं?

सही तरीका, described by bbum के रूप में, यह है:

NSError *error; 
BOOL success = [blah blah:blah error:&error]; 
if (!success) { 
    NSLog(@"Error: %@ %@", error, [error userInfo]); //Or other error handling (e.g., [NSApp presentError:error]). 
} else { 
    //Succeeded—ignore the error variable entirely 
} 

(यही कारण है कि एक विधि blah:error: कि एक BOOL रिटर्न के लिए है, सवाल bbum में उदाहरण दिए एक विधि है कि एक वस्तु लौटे लिए किया गया था त्रुटि-। हैंडलिंग पैटर्न दोनों मामलों के लिए समान है।)

अपने ट्विटर अपडेट के तुरंत बाद, some APIs will output an error object under the hood even if what you asked for succeeded, जिसका अर्थ है कि BOOL वापसी के बजाय त्रुटि चर का परीक्षण करना आपको मूर्ख बना सकता है। मुझे लगता है कि यह आपके साथ हुआ है।

समाधान केवल एपीआई रिपोर्ट विफल होने पर त्रुटि ऑब्जेक्ट को देखें।

1

मत भूलना नहीं के बराबर मूल्य

NSError* err = nil; 
[anObject doSomethingGetError:&err]; 
if (err) { 
    NSLog(...); 
} 

साथ NSError init करने के लिए अगर इससे काम नहीं करता है, यह एपीआई बग

+1

एपीआई गलत के साथ अपने 'nil' प्रारंभकर्ता clobbers अगर मदद नहीं करेगा यही कारण है (या वैध लेकिन अर्थहीन) वस्तु। मेरा उत्तर और @bbum से ट्वीट देखें जो यह उद्धृत करता है। –

+0

एपीआई कोई त्रुटि नहीं होने पर "त्रुटि" संदर्भ [जो शून्य है] स्पर्श नहीं करेगा। - (NSPersistentStore *) addPersistentStoreWithType: (NSString *) storeType कॉन्फ़िगरेशन: (NSString *) कॉन्फ़िगरेशन यूआरएल: (NSURL *) storeURL विकल्प: (NSDictionary *) विकल्प त्रुटि: (NSError **) त्रुटि; यह विधि वापसी BOOL प्रकार – vaddieg

+0

नहीं है वास्तव में, त्रुटि ऑब्जेक्ट को शून्य पर सेट करने से केवल यह संकेत मिलता है कि यदि कोई होना चाहिए तो आप त्रुटि ऑब्जेक्ट की जांच करने में रुचि रखते हैं। @ पीटर होसे का जवाब यह निर्धारित करने का सही तरीका दिखाता है कि कोई विधि कॉल सफल हुआ या नहीं। –

संबंधित मुद्दे