无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)

Posted

技术标签:

【中文标题】无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)【英文标题】:Could not cast value of type '__NSArrayI' (0x106d27d88) to 'NSString' (0x107be3c40) 【发布时间】:2017-06-28 07:36:07 【问题描述】:

我正在尝试下载和过滤 json 数据。过滤 json 数据后,我打印了工作正常的过滤数据。但是当我尝试将该数据附加到字符串类型的数组时,它会崩溃并且错误是:-

无法将类型“__NSArrayI”(0x106d27d88)的值转换为“NSString” (0x107be3c40)。

code sample and output

【问题讨论】:

请发布您的代码而不是屏幕截图。 另外,您的productName 实际上是一个数组,它包含所有这些元素,因此无法将其转换为字符串。 @ShamasS 的两个 cmets 上的 +1。此外,您似乎使用 Swift 3,摆脱了 NSArray、NSString 和其他 Foundation(也是 Objective-C)的东西,并且更喜欢 Swift 的东西(没有NS 前缀几乎一样)。 发帖时尝试概括问题,以便更容易搜索和上下文化。例如0x106d27d88 仅在问题发生时适用于您的机器。 【参考方案1】:

将该 productName 转换为这样的字符串数组。 [字符串]

let productName = jsonObj?.value(forKey: "name") as! [String]

然后点击此链接

1) https://www.hackingwithswift.com/example-code/arrays/how-to-join-an-array-of-strings-into-a-single-string

2) How do I convert a Swift Array to a String?

例子

let productName1 = ["1", "2", "3"]

var arrayForName1 = [String]()

arrayForName1 = ["name"]

let str = productName1.joined(separator: "")
// ["name", "123"]

// or
let str1 = productName1.joined(separator: ", ")
// ["name", "1, 2, 3"]

arrayForName1.append(str)

【讨论】:

【参考方案2】:

您的 productName 是一个数组,您将其转换为 String 以便导致您的问题。您有两种选择来修复此基础:

    验证您的 productName 数组并找到要附加到您的 arrayForName1 数组的实际字符串的正确索引。所以你的代码看起来像

    arrayForName1.append(productName[0])

    如果您的productName 是一个字符串数组,并且您想将它们全部添加到arrayForName1,只需使用此代码

    arrayForName1 += productName

【讨论】:

【参考方案3】:

到您的 json 数据 数组中包含任何参数(例如:Number = ["1", "2", "3"])

var Number1:String? = ""
var NumberList:[String] = []

if let Number_from = anItem["Number"] as? String 
  self.Number1 = Number_from
  self.NumberList.append(self.Number1!)
 else 
  self.NumberList.append("Not Available")

【讨论】:

以上是关于无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)的主要内容,如果未能解决你的问题,请参考以下文章

无法将“__NSArrayI”(0x106d27d88)类型的值转换为“NSString”(0x107be3c40)

目标 C 错误 -[__NSArrayI 长度]:无法识别

Cordova iOS 3.6.3+ 问题 - [__NSArrayI 长度]:无法识别的选择器

从字典访问 FlutterStandardTypedData 时出现“[__NSArrayI 数据]:无法识别的选择器”

为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?

为啥我得到“[__NSArrayI allKeys]:无法识别的选择器发送到实例”/为啥 NSDictionary 正在转换?