斯威夫特。错误:无法将类型'[AnyObject?]'的值转换为期望的参数类型'AnyObject?'

问题描述:

试图离线保存数据。但是,得到无法将类型'[AnyObject?]'的值转换为期望的参数类型'AnyObject?'的错误。无法弄清楚如何将AnyObject数组转换为字符串数组。感谢你们的帮助。斯威夫特。错误:无法将类型'[AnyObject?]'的值转换为期望的参数类型'AnyObject?'

// outside the function 
var senderArray = [String]() 
var messageArray = [String?]() 
var photoArray = [UIImage?]() 
// func......... 
    query.whereKey("downloaded", equalTo: false) 
    query.findObjectsInBackgroundWithBlock { (objects: [PFObject]?, error: NSError?) -> Void in 
     if error != nil { 
     } 

     for object in objects! { 
      self.senderArray.append(object.objectForKey("sender") as! String) 
      self.messageArray.append(object.objectForKey("message") as? String) 
      if object.objectForKey("photo") != nil { 
       if let converyPFFile = object.objectForKey("photo") as? PFFile{ 
        let temp = try! converyPFFile.getData() 
        let image = UIImage(data: temp) 
        self.photoArray.append(image) 
       } 
      } else { 
       self.photoArray.append(nil) 
      } 
     } 

     var tempLocalNameArray = [AnyObject?]() 
     var tempLocalMessageArray = [AnyObject?]() 
     var tempLocalImageArray = [AnyObject?]() 

     if NSUserDefaults.standardUserDefaults().arrayForKey("nameArray") != nil { 
      tempLocalNameArray = NSUserDefaults.standardUserDefaults().arrayForKey("nameArray")! 
      tempLocalMessageArray = NSUserDefaults.standardUserDefaults().arrayForKey("messageArray")! 
      tempLocalImageArray = NSUserDefaults.standardUserDefaults().arrayForKey("imageArray")! 
     } 

     for i in 0 ..< self.senderArray.count { 
      tempLocalNameArray.append(self.senderArray[i]) 
      tempLocalMessageArray.append(self.messageArray[i]) 
      tempLocalImageArray.append(self.photoArray[i]) 
     } 
     // error highlighted 
     NSUserDefaults.standardUserDefaults().setObject(tempLocalNameArray, forKey: "nameArray") 
     // error highlighted 
     NSUserDefaults.standardUserDefaults().setObject(tempLocalMessageArray, forKey: "messageArray") 
     // error highlighted 
     NSUserDefaults.standardUserDefaults().setObject(tempLocalImageArray, forKey: "imageArray") 

     self.loadChat() 
    } 
+0

你会在哪一行发生错误? – Darko

+0

最后三行(/ /错误突出显示) – Tony

您正在尝试使用NSUserDefaults存储图像。但NSUserDefaults不存储任何类型的数据。请阅读documentation

The value parameter can be only property list objects: NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary. For NSArray and NSDictionary objects, their contents must be property list objects.

article可以帮助你。

+0

我想这个问题也来自可选像messageArray = [String?]() – Tony

+0

是的,但这不是你的“根”问题。你可以使用[String],这完全没有问题。但是你需要存储更复杂的数据,然后存储一个简单的String数组。也许想到将图像转换为NSData。 – Darko