2014-12-16 13 views
5

मैं विभिन्न अपनी रिपोर्टों में प्रदर्शित दुर्घटनाओं कि निम्न कारणों से रिपोर्ट कर रहे हैं:newParagraphStyle दुर्घटना नहीं लगा पाई

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'failed to generate newParagraphStyle' 

एप्लिकेशन है कि इस पर हो रहा है प्रोग्राम के रूप में जिम्मेदार ठहराया पाठ का एक बहुत सेट करता है (फ़ॉन्ट, रंग , कभी-कभी अनुच्छेद शैलियों), लेकिन मुझे सीधे इससे संबंधित कोई पैटर्न नहीं मिल रहा है। क्या मैं देख पा रहे हैं लगभग सभी रिपोर्टों के setLineBreakMode के कुछ फार्म के लिए स्टैक ट्रेस में एक संदर्भ शामिल है:

-[_UICascadingTextStorage(Accessors) setLineBreakMode:] 

मैं इस अपने आप को बनाने में समर्थ नहीं किया गया है, लेकिन यह एक काफी नियमित आधार पर दिखाई देती है मेरी दुर्घटना रिपोर्टिंग पर। मैं विशेष रूप से इनमें से किसी भी स्थान पर लाइन ब्रेक मोड सेट नहीं कर रहा हूं। कोई विचार?

संपादित करें: मैंने इसमें अधिक समय बिताया और पुनरुत्पादन के लिए एक पैटर्न खोजने में सक्षम था। तो मेरे पास UITextField है, और जब आप कीबोर्ड पर वापसी करते हैं तो "/ n" वर्ण का पता लगाया जाता है और टेक्स्टफील्ड अपनी पहली प्रतिक्रियाकर्ता स्थिति से इस्तीफा देता है। यदि उसके बाद किसी भी बिंदु पर, आप फ़ील्ड के पाठ (या जिम्मेदार पाठ) को संशोधित करने का प्रयास करते हैं, तो यह क्रैश हो जाता है। एक महत्वपूर्ण तत्व है, यह केवल तभी होता है जब आपके पास टाइपिंग एट्रिब्यूट सेट हो। इससे कोई फर्क नहीं पड़ता कि वे क्या सेट कर रहे हैं।

मैंने सब कुछ करने की कोशिश की, टेक्स्ट सेट करने से पहले टाइपिंग एट्रिब्यूट्स सेट करना, एक निश्चित स्ट्रिंग सेट करना सुनिश्चित करने के लिए कि यह वह नहीं था जिसे हम इसे स्थापित कर रहे थे - कोई भाग्य नहीं। भिड़ता रहता है। ऐसा लगता है कि एक बार जब आप इस राज्य में आते हैं, तो टेक्स्टफील्ड बस टूट जाता है। इससे बचने के लिए एक हैक टेक्स्टफील्ड को उड़ाना और एक नया बनाना है - लेकिन यह सिर्फ यही है। एक हैक

कुछ और अधिक रोचक जानकारी, जिस तरह से कोड का पता लगाता है कि वापस कुंजी अच्छी तरह से नहीं लिखा गया था - यह "/ n" पता चला है और में नहीं लौटे:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 

यह उचित विधि का उपयोग नहीं किया:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 

अनुप्रयोग में एक जगह में यह वास्तव में, दुर्घटना तय अन्य स्थानों में यह हमेशा सही विधि का उपयोग किया गया था और दुर्घटना अभी भी हो रहा है। टेक्स्टफील्ड को उड़ाने और एक नया निर्माण करने के लिए एकमात्र काम है। मेरे लिए, यह आईओएस में एक बग की तरह लगता है।

+0

मैं भी दुर्घटना हो गई ... परियोजना को साफ करें और फिर से पुनर्निर्माण करें .. मिश्रित .. पता नहीं क्या समस्या है –

उत्तर

1

मैं अभी इस मुद्दे था और सीधे resignFirstResponder से पहले समस्याग्रस्त textFieldnil के typingAttributes सेट करके उसे ठीक करने में सक्षम है कि एक ही textField द्वारा कहा जाता है था।

0

फ्रेंकी के समाधान में मदद की, लेकिन अभी भी बढ़त मामलों है कि इस त्रुटि को शुरू हो रहा पाया:

** Assertion failure in -[_UICascadingTextStorage setLineBreakMode:], 
/BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.30.14/TextSystem/_UICascadingTextStorage.m:292 

मेरे समाधान UITextField उपवर्ग और एक hackTextAttributes संपत्ति जोड़ने के लिए किया गया था:

import UIKit 

class HackTF: UITextField { 
    var hackTextAttributes: [String: AnyObject] 

    init(frame: CGRect, textAttributes: [String: AnyObject]) { 
    hackTextAttributes = textAttributes 
    super.init(frame: frame) 
    delegate = self 
    } 

    required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
    } 

    func hackSetText(text: String) { 
    attributedText = NSAttributedString(string: text, attributes: hackTextAttributes) 
    } 

    func hackSetAttributedText(text: String, attributes: [String: AnyObject]) { 
    hackTextAttributes = attributes 
    hackSetText(text) 
    } 
} 

extension HackTF: UITextFieldDelegate { 
func textFieldDidBeginEditing(textField: UITextField) { 
    typingAttributes = hackTextAttributes // Make sure fields with no text have appropriate typingAttributes 
    } 
} 

// MARK: Apple Crash Prevention Hack 
extension HackTF { 
    override func resignFirstResponder() -> Bool { 
    var isResigningHack = false 
    if self.text?.length == 0 { // if no text, add some text so we won't crash... 
     isResigningHack = true 
     attributedText = NSAttributedString(string: " ", attributes: hackTextAttributes) 
    } 

    typingAttributes = nil 
    let resign = super.resignFirstResponder() 

    if isResigningHack { // clear the text 
     attributedText = NSAttributedString(string: "", attributes: hackTextAttributes) 
    } 

    return resign 
    } 
} 
संबंधित मुद्दे