无法将“__NSCFNumber”()类型的值快速转换为“NSArray”
Posted
技术标签:
【中文标题】无法将“__NSCFNumber”()类型的值快速转换为“NSArray”【英文标题】:Could not cast value of type '__NSCFNumber' () to 'NSArray' swift 【发布时间】:2015-08-29 17:29:48 【问题描述】:为什么不能将 NSCFNumber(核心数据)转换为 NSArray?
错误:
无法将“__NSCFNumber”(XXXXXXXX)类型的值转换为“NSArray” (XXXXXXXX)。
代码:
//Fetch Settings
func fetchAccounSetting()
let entityDescription = NSEntityDescription.entityForName("UserSettings", inManagedObjectContext: Context!)
let request = NSFetchRequest()
//let data = UserSettings(entity: entityDescription!, insertIntoManagedObjectContext: Context)
request.entity = entityDescription
var dataObjects: [AnyObject]?
do
dataObjects = try Context?.executeFetchRequest(request)
catch let error as NSError
print(error)
dataObjects = nil
for result in dataObjects as! [NSManagedObject]
let dataSelected = NSArray(array: result.valueForKey("favCategory")! as! NSArray)
print(dataSelected)
更新:
我怎样才能收到dataSelected
的计数?
【问题讨论】:
您不能将数字转换为数组,因为它们几乎不是同一类型的对象。 同样的原因我不能把我的车变成大象。它不是一个,并且说它是并没有使它如此。 favCategory 的值是 NSNumber,而不是数组,因此您的强制向下转换失败 嘿,如果dataObjects
为 nil,你的 for 循环不会崩溃吗? (如果发生错误并且您的 fetch 请求抛出)
@KelvinLau 是的 - 特别是 as!
断言如果结果是错误的会导致崩溃
@AaronBrager 确认。开始使用guard
OP!
【参考方案1】:
Core Data 首先不能存储数组或字典。记得以前在学习的时候遇到过这个问题。
AKA,您的 dataObjects
数组没有任何可以类型转换为 NSArray
的内容。做到这一点的方法是对可以模仿数组的一对多关系(创建Set
)进行建模。
【讨论】:
【参考方案2】:result.valueForKey("favCategory")!
正在返回一个数字,但您似乎在期待一个数组。
也许你的意思是:
let dataSelected = [result.valueForKey("favCategory")!]
如果您知道要返回的类型,则可以选择强制转换它:
let dataSelected = [result.valueForKey("favCategory")!]
if let dataSelected = dataSelected as? [NSNumber]
// dataSelected is of type [NSNumber] a.k.a. Array<NSNumber>
print(dataSelected)
【讨论】:
我怎样才能收到dataSelected
的计数?
当我尝试dataSelected.count
时,它给了我最后的选择数,而不是总数。
不,它没有,它为您提供数组中的元素数量。
是的,唯一不同的是,当数组中有 2 个项目时,它会打印第一个数字两次。
那是因为你在 for
循环中打印它吗?以上是关于无法将“__NSCFNumber”()类型的值快速转换为“NSArray”的主要内容,如果未能解决你的问题,请参考以下文章
无法从 JSON 中获取值(无法将类型“__NSCFNumber”(0x7fff87b9c520)的值转换为“NSDictionary”(0x7fff87b9d5b0))
[__NSCFNumber 长度]:无法识别的选择器发送到实例 0xb000000000000113'
ios [__NSCFNumber 长度]:发送到实例的无法识别的选择器
iOS报错[__NSCFNumber length]: unrecognized
[__NSCFNumber countByEnumeratingWithState:objects:count:]:发送到实例的无法识别的选择器
ios [__NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x7a97d4c0'报错