【问题标题】:Retrieving and casting data from an array in Parse and SWIFT在 Parse 和 SWIFT 中从数组中检索和转换数据
【发布时间】:2017-01-09 20:57:33
【问题描述】:

当我尝试检索 Parse 中的数组元素并将其附加到代码中创建的数组时,总是会出现此错误:

无法将“__NSArrayM”(0x10b281b60)类型的值转换为“NSString” (0x10bdc5b48)。

但是,当我使用 print 时,它可以正常工作并且我可以获取数据

 var query = PFQuery(className: "Courses")

 query.whereKey("subject", equalTo: "\((object["course"] as! String))")                        
 query.findObjectsInBackgroundWithBlock { (objects, error) in

 if let objects = objects
 {
     for object in objects
     {                       
         print(object["subject"] as! String)
         self.courses.append(object["subject"] as! String)
         print(object.valueForKey("timeToShow")!)  
         // it works to print the elemnts in array from parse self.dates.append((object.valueForKey("timeToShow") as! String))  
         // this line shows the error down !

         self.tableView.reloadData()
     }
}

【问题讨论】:

  • 你在哪一行得到错误?
  • 这一行 self.courses.append(object["subject"] as!String)
  • self.courses 的定义是什么?它是一个字符串数组吗?因为object["subject'] 显然是一个数组(如打印语句所示),所以这不起作用。
  • (object["subject"]) 不是交易它被定义为字符串 self.dates.append((object.valueForKey("timeToShow") as!String)) 是问题日期被定义为字符串数组,我想从解析数组中检索,我想将它们附加到日期,这又是一个字符串数组
  • object["subject"] 怎么不是问题,你说那是错误发生的地方..

标签: ios arrays swift heroku parse-platform


【解决方案1】:

从你说的:

  1. self.datesString 类型的数组
  2. object.valueForKey("timeToShow")String 类型的数组
  3. 您想将object.valueForKey("timeToShow") 中的值附加到self.dates 的末尾

因此,您需要追加数组的所有值,而不是强制转换为字符串并尝试追加(注意这取决于您使用的 Swift 版本):

let times = object.valueForKey("timeToShow") as! [String]
self.dates += times 

// Or:
self.dates.extend(times) // Swift 1.2
self.dates.appendContentsOf(btimes) // Swift 2
self.dates.append(contentsOf: times) // Swift 3

将一个数组附加到另​​一个取自 this StackOverflow example 的数组。

【讨论】:

  • 在第二行有一个错误“二元运算符 += 无法应用类型 ['String'] 和 'AnyObject' 的替代方法是什么 =( ?
  • @AhmadKhawatmi 刚刚更新了答案,您需要将AnyObject 转换为[String] (let times = object.valueForKey("timeToShow") as! [String] )
  • AnyObject to [String] (let times = object.valueForKey("timeToShow") as! [String] ) 它没有用 =( 但我只是在你的帮助下用另一种棘手的方法解决了这个问题几个小时大声笑我用这个 var times = object.valueForKey("timeToShow")!times = String(times) self.dates.append(times as!String) 很抱歉我造成的混乱,非常感谢 Carter =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多