ibireme / YYCache

High performance cache framework for iOS.
MIT License
2.38k stars 511 forks source link

把YYCache文件夹拖入项目中报Ambiguous use of 'objectForKey'错误 #45

Closed heeween closed 8 years ago

heeween commented 8 years ago

大神,写demo调试好了,现在拖入工程中就会报这个错误 ,为什么呢 image

ibireme commented 8 years ago

首先检查 Xcode 版本是否是最新版本。

之后检查项目代码中是否有相同方法从而造成冲突,再检查下这块儿的类型推断是否有问题。

heeween commented 8 years ago

这是IQKeyboardManagerSwift的代码 是跟IQKeyboardManagerSwift冲突了么

heeween commented 8 years ago

现在几乎是最新的了xcode了 昨天发布了7.3.1 我更新试下

ibireme commented 8 years ago
private var textFieldInfoCache = NSMutableSet()

for infoDict in textFieldInfoCache {

    if let view = infoDict.objectForKey(kIQTextField) as? UIView {
        updateReturnKeyTypeOnTextField(view)
    }
}
2016-05-06 12 07 46

首先这个 textFieldInfoCache 不支持范性,然后在 for in 的时候,取出的 infoDict 应该是无法推断类型的。此时调用了 objectForKey,Xcode 应该会根据这个方法全局搜索,确定参数和返回类型的唯一性。引入 YYCache 时,这个猜测就会有歧义了。

其实如果你只引入 IQKeyboard,然后随便新建一个类,加一个 objectForKey: 的方法并返回一个有明确类型的对象,这个也会在这里报错,很容易验证。这里应该明确指定 infoDict 的类型。

heeween commented 8 years ago

明白了 方法名相同的问题 NSSet里面元素又无法推断类型