मैं अपने आईफोन ऐप में NSAssert
का उपयोग करने की कोशिश कर रहा हूं ताकि अगर एक अप्रत्याशित स्थिति होती है, तो एप्लिकेशन क्रैश लॉग में एक सार्थक संदेश के साथ तेज़ी से और क्रैश हो जाता है।धागे में एनएसएएसएसर्ट उपयोग
यह ठीक काम करता है अगर विफल NSAssert
मुख्य धागे पर है, क्योंकि यह डिफ़ॉल्ट रूप से NSInternalInconsistencyException
बढ़ाता है जो निष्पादित नहीं होता है और निष्पादन रोकता है। लेकिन मैं पृष्ठभूमि धागे में भी प्रोसेसिंग कर रहा हूं, इस मामले में NSAssert
बस थ्रेड को रोकता है, लेकिन प्रोग्रामिंग चलती रहती है।
- (void)main {
@try {
int x = 14;
...
NSAssert1(x > 20, @"x should be greater than 20, was %d", x);
...
}
@catch (NSException *e) {
[e performSelectorOnMainThread:@selector(raise) withObject:nil waitUntilDone:YES];
}
}
वहाँ एक बेहतर तरीका है:
मेरे वर्तमान समाधान को पकड़ने और मुख्य थ्रेड में अपवाद rethrow को (इस मामले में, NSOperation
के main
विधि) है? शायद एक कस्टम एनएसएएसएसरशन हैंडलर का उपयोग कर?
मैं जानता हूँ कि मैं सिर्फ सी assert
इस्तेमाल कर सकते हैं एक स्थिर टिप्पणी के साथ:
assert(x > 20 && "x should be greater than 20");
लेकिन यह मुझे दिखाने के लिए क्या x
की वास्तविक ऐसा न करने पर मूल्य है अनुमति नहीं है।
मुझे एक ही समस्या है, लेकिन प्रस्तावित समाधान मेरे लिए काम नहीं करेगा। एनएसएएसएसर्ट ट्रिगर किया जा रहा है, धागा मर जाता है, लेकिन ऐप चल रहा है। मैं कोकोस 2 डी इंजन का उपयोग कर रहा हूं। क्या कोई और अधिक समाधान प्रदान कर सकता है? –