xcode开始抱怨以下代码(在几个月内没有任何问题工作正常):
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof DataObjectHolder) {
// Do this...
} else if (holder instanceof GroupViewHolder) {
// ...do that
}
}
到目前为止一切都很好。但是当我尝试从结果中提取数据时,我得到了一个'模糊地使用'下标'以下错误:
let request = NSFetchRequest(entityName: entity)
request.returnsDistinctResults = true
let nsArr: NSArray = ["int_field", "date_field"]
request.propertiesToFetch = nsArr as [AnyObject]
request.resultType = .DictionaryResultType
let predicate = NSPredicate(format: "(val1 == %d) AND (val2 == %@)", argumentArray: [anIntegerValue, aStringValue])
request.predicate = predicate
do {
let results: NSArray = try moc.executeFetchRequest(request)
for result in results {
不确定发生了什么,但如果我将上述语法替换为:
let val1 = result["int_field"] as! Int
let val2 = result["date_field"] as! NSDate
它有效。我不清楚的是为什么声明以下内容是不够的(或者在ios 9.2中发生的事情导致这种情况):
let val1 = (result as! NSDictionary) ["int_field"] as! Int
let val2 = (result as! NSDictionary)["date_field"] as! NSDate
思想?
答案 0 :(得分:1)
请使用Swift本机收藏类型,它们更容易维护。
首先,将数组直接分配给propertiesToFetch
。没有NSArray
,没有[AnyObject]
request.propertiesToFetch = ["int_field", "date_field"]
您的结果是一系列字典,其中包含String
个密钥和Int
/ NSDate
个值。多个类型必须由AnyObject
表示。
do {
let results = try moc.executeFetchRequest(request) as! [[String:AnyObject]]
现在,由于编译器知道数组包含字典,因此可以顺利编译
for result in results {
let val1 = result["int_field"] as! Int
let val2 = result["date_field"] as! NSDate
}
}
基金会集合类型不包含类型信息,可能会导致Ambiguous use
条消息。
答案 1 :(得分:0)
仔细观察后,Vadian建议的解决方案对我不起作用。
唯一有效的是我最初的解决方案:
let val1 = (result as! NSDictionary) ["int_field"] as! Int
let val2 = (result as! NSDictionary)["date_field"] as! NSDate
似乎触发器正在导入Realm框架(以解决另一个依赖关系)。我只能说,当我删除Realm时,错误/问题就会消失。
尽管我目前还没有真正使用Realm,但仍然会发生这种情况。