【问题标题】:Swift. Error: Cannot convert value of type '[AnyObject?]' to expected argument type 'AnyObject?'迅速。错误:无法将类型“[AnyObject?]”的值转换为预期的参数类型“AnyObject?”
【发布时间】:2016-07-22 17:23:06
【问题描述】:

尝试离线保存数据。但是,出现无法将类型“[AnyObject?]”的值转换为预期的参数类型“AnyObject?”的错误。无法弄清楚如何将 AnyObject 数组转换为 String 数组。谢谢大家的帮助。

// 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()
     }

【问题讨论】:

  • 你在哪一行得到错误?
  • 最后三行(//错误突出显示)

标签: arrays swift append nsuserdefaults


【解决方案1】:

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

value参数只能是属性列表对象:NSData, NSString、NSNumber、NSDate、NSArray 或 NSDictionary。对于 NSArray 和 NSDictionary 对象,其内容必须是属性列表对象。

这个article 可以帮助你。

【讨论】:

  • 我猜这个问题也来自可选的,比如 messageArray = [String?]()
  • 是的,但这不是您的“根本”问题。你可以只使用[String],这完全没有问题。但是您需要存储比简单的字符串数组更复杂的数据。也许考虑将图像转换为 NSData。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-06
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多