2015-10-15 8 views
19

मैं उपयोगकर्ता को प्रदर्शित करने के लिए एक त्रुटि ऑब्जेक्ट बनाने की कोशिश कर रहा हूं।स्विफ्ट बनाने के लिए एनएसईआरआर ऑब्जेक्ट

let userInfo: [NSObject : AnyObject] = 
    [ 
    "NSLocalizedDescriptionKey" : NSLocalizedString("Unauthorized", comment: ""), 
    "NSLocalizedFailureReasonErrorKey" : NSLocalizedString("Unauthorized", comment: "") 
    ] 
let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: httpResponse.statusCode, userInfo: userInfo) 
print("Error in Post: \(err.localizedDescription)") 

दुर्भाग्य से उत्पादन होता है:

Error in Post: The operation couldn’t be completed.(ShiploopHttpResponseErrorDomain error 401.) 

मैं उपयोगकर्ता है कि वह अपने खाते को सक्रिय करने चाहिए करने के लिए दिखाने के लिए सक्षम होना चाहते हैं। कोई विचार??

उत्तर

21

लगता है कि आपने (कुंजी शब्दकोश देखें) हैं:

स्विफ्ट 2

let userInfo: [NSObject : AnyObject] = 
[ 
    NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: ""), 
    NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "") 
] 

स्विफ्ट 3

let userInfo: [AnyHashable : Any] = 
      [ 
       NSLocalizedDescriptionKey : NSLocalizedString("Unauthorized", value: "Please activate your account", comment: "") , 
       NSLocalizedFailureReasonErrorKey : NSLocalizedString("Unauthorized", value: "Account not activated", comment: "") 
     ] 

तब में त्रुटि वस्तु बनाने दोनों एस wift 2 या 3 इस तरह:

let err = NSError(domain: "ShiploopHttpResponseErrorDomain", code: 401, userInfo: userInfo) 
println("Error in Post: \(err.localizedDescription)") 

NSLocalizedDescriptionKey और NSLocalizedFailureReasonErrorKey वैश्विक स्ट्रिंग चर रहे हैं, और userInfo शब्दकोश के अंदर चाबियाँ। मान आप निर्दिष्ट से थोड़ा अलग हैं:

println(NSLocalizedDescriptionKey) //prints "NSLocalizedDescription" 
println(NSLocalizedFailureReasonErrorKey) //prints "NSLocalizedFailureReason" 

मैं इसे अच्छा प्रलेखन पर xcode के भीतर "परिभाषा करने के लिए कूद" द्वारा राइट-क्लिक करके (इस मामले में NSError) वर्ग और चयन देखने के लिए अभ्यास पाते हैं। इस तरह के सभी प्रकार के सवालों का उत्तर दिया जा सकता है। :)

+0

यह भी मतलब हो सकता है NSError से इनहेरिट और फिर localizedDescription के लिए गेटर अधिभावी द्वारा अपनी खुद की त्रुटि वर्ग बनाने के लिए। – ProgrammierTier

+0

बात यह है कि मुझे अपने कस्टम संदेश को दिखाने के लिए कस्टम "NSLocalizedDescriptionKey" कस्टम करने में सक्षम होने के लिए एनएसईआरआरर को उप-वर्ग करना चाहिए। मैं स्विफ्ट और प्रोग्रामिंग के लिए नया हूँ। तो मुझे यह जानने के लिए खोदना होगा कि यह कैसे कार्यान्वित करें :) आपकी प्रतिक्रिया के लिए thx –

5

यहाँ मेरी हेल्पर विधि है जो कुछ अतिरिक्त स्टैक ट्रेस जानकारी के साथ NSError वस्तु बनाता है:

class Helper { 

    static let errorDomain = "com.example.error" 
    static let errorFuncKey = "com.example.error.function" 
    static let errorFileKey = "com.example.error.file" 
    static let errorLineKey = "com.example.error.line" 

    static func error(_ message: String, record: Bool = true, function: String = #function, file: String = #file, line: Int = #line) -> NSError { 

     let customError = NSError(domain: errorDomain, code: 0, userInfo: [ 
      NSLocalizedDescriptionKey: message, 
      errorFuncKey: function, 
      errorFileKey: file, 
      errorLineKey: line 
     ]) 

     // if (record) { 
     //  customError.record() 
     // } 

     return customError 
    } 
} 

उपयोग:

let error = Helper.error(NSLocalizedString("Unauthorized", comment: "Account not activated")) 

सूचना 3 सहायक कक्षा में टिप्पणी की लाइनों , मैं क्रैशलिटिक्स में त्रुटियों को रिकॉर्ड करने के लिए उपयोग करता हूं, आप लाइनों के ऊपर असुविधा कर सकते हैं और क्रैशलिटिक्स में त्रुटियों को रिकॉर्ड करने के लिए निम्न एक्सटेंशन का उपयोग कर सकते हैं:

extension NSError { 

    func record() { 
     Crashlytics.sharedInstance().recordError(self) 
    } 

} 
+0

क्यों डाउनवोट, कोड के ऊपर एनएसईआरआरआर ऑब्जेक्ट बनाता है, है ?, आप इस मुद्दे को हल करने के लिए कैसे हैं (अगर वास्तव में कोई है) क्यों नहीं जानते व्यक्ति ने मतदान किया? मैंने किसी अन्य व्यक्ति के उत्तर पर एक प्रश्न पर कभी भी वोट नहीं दिया है, लेकिन मैं दूसरों को वोट देता हूं। फिर भी धन्यवाद! – AamirR

5

स्विफ्ट 3 में एक बहुत ही सरल त्रुटि बनाना:

let error = NSError(domain: "", code: 0, userInfo: [NSLocalizedDescriptionKey : "Object does not exist"]) 
संबंधित मुद्दे