2015-09-21 9 views
7

Xcode7 और तेज, मेरे कोड:प्रकार का मान कनवर्ट नहीं कर सकता '[NSObject: AnyObject]' की उम्मीद तर्क प्रकार के '[स्ट्रिंग: AnyObject]'

func loadDefaults() { 
    let settingBundle = NSBundle.mainBundle().pathForResource("Settings", ofType: "bundle") 
    if settingBundle == nil { 
     return 
    } 

    let root = NSDictionary(contentsOfFile: settingBundle!.stringByAppendingString("Root.plist")) 

    let prefrences = root?.objectForKey("PreferenceSpecifiers") as! Array<NSDictionary> 

    let defautlsToRegister = NSMutableDictionary(capacity: root!.count) 

    for prefrence in prefrences { 
     let key = prefrence.objectForKey("Key") as! String! 
     if key != nil { 
      defautlsToRegister.setValue(prefrence.objectForKey("DefaultVale"), forKey: key!) 
     } 
    } 

    NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject]) 
} 

समस्या कोड:

NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [NSObject: AnyObject]) 

इमारत चेतावनी

प्रकार का मान कनवर्ट नहीं कर सकता '[NSObject: AnyObject]' की उम्मीद तर्क प्रकार के '[स्ट्रिंग: AnyObject]'

परिवर्तन कोड:

कृपया मुझे सिखाने कैसे करना है:

NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject]) 

इमारत चेतावनी

'NSMutableDictionary' को '[AnyObject स्ट्रिंग]' परिवर्तनीय नहीं है? धन्यवाद।

+0

कृपया उदाहरण दिखाने:

let result = dict.objectForKey(NSString(string: "myKey")) as? NSMUtableArray

समस्या यहां पर अधिक

मैं इसके लिए दो तरीके को देखने के 'के defautlsToRegister 'टाइप –

+0

के रूप में' as! 'मदद का उपयोग करता है, जैसा कि http://stackoverflow.com/questions/24099165/how-do-i-convert-an-nsdictionary-to-a-swift-dictionarystring-nsobject में सुझाया गया है? – Tali

उत्तर

5

आपका defautlsToRegister निम्न स्वरूप [String: AnyObject]

उदाहरण में होना चाहिए: निम्नलिखित

let defautlsToRegister = ["Test":10] 
NSUserDefaults.standardUserDefaults().registerDefaults(defautlsToRegister as [String: AnyObject]) 
+0

ने इसे खींचा। आपका बहुत बहुत धन्यवाद! –

+0

@ हेनरीहेलेन: आपका स्वागत है :) –

0

मेरे लिए यह काम किया है बिना किसी चेतावनी के काम करना चाहिए।

let token = fields["X-AUTH-TOKEN"]! as? [[String : AnyObject]] //{ 
       // safe to use employees 
       self.bindings.setObject(NSString(format: "%@", token!) as String, forKey: "X-AUTH-TOKEN") 

प्रारूप (एनएसएसटींग विधि) इस परिदृश्य में काम करेगा।

+0

क्या आप मुझे बता सकते हैं कि @down voter मतदान करने का कारण क्या है? मेरे लिए उपर्युक्त कोड काम किया। –

2

मैंने इस त्रुटि के बारे में एक साधारण बात देखी है। मुझे यकीन नहीं है कि अगर यह मामला है लेकिन String to NSString कास्टिंग मेरे लिए समस्या का समाधान लगता है। मुझे एक स्पष्टीकरण मिला कि AnyObject किसी भी संदर्भ प्रकार के उदाहरणों का प्रतिनिधित्व करने के लिए एक प्रकार का उपनाम है, उदाहरण के लिए: NSString। लेकिन String एक struct है इसलिए यह AnyObject के लिए संदर्भ प्रकार नहीं हो सकता है।

पहले::

let keyForMyKey: NSString = NSString(string: "mykey") let result = dict.objectForKey(keyForMyKey) as? NSMutableArray

दूसरा: http://drewag.me/posts/swift-s-weird-handling-of-basic-value-types-and-anyobject

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

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