【发布时间】:2015-12-28 03:15:06
【问题描述】:
我有功能
func findObjectInArray(array: [AnyObject], field: String?, fieldValue: AnyObject, startFromTheBeginning: Bool, minIndexTemp: Int, maxIndexTemp: Int) -> AnyObject?
我有:
var minIndex = minIndexTemp
var maxIndex = maxIndexTemp
if (array.count == 0 || minIndex < 0 || maxIndex < 0) {
return nil
}
if (minIndex > maxIndex) {
let rem = minIndex;
minIndex = maxIndex;
maxIndex = rem;
}
if (maxIndex >= array.count) {
maxIndex = array.count - 1;
}
let startIndex = startFromTheBeginning ? minIndex : maxIndex;
let endIndex = startFromTheBeginning ? maxIndex : minIndex;
for (var i = startIndex; (startFromTheBeginning ? i <= endIndex : i >= 0); (startFromTheBeginning ? i++ : i--)) {
let object = array[i]
var objectFieldValue: AnyObject? = nil
if (field != nil) {
print("test = ", (object as! SAd).adID)
objectFieldValue = object.valueForKeyPath(field!)
}
我在崩溃前记录我看到 test = 1 。所以这意味着object 被转换为SAd 并且它具有adID 字段,但是在objectFieldValue = object.valueForKeyPath(field!) 行上应用程序崩溃并出现错误:
*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<Project.SAd 0x12d731930> valueForUndefinedKey:]: this class is not key value coding-compliant for the key adID
这里是类
class SAd: NSObject {
var adID: Int!
var bloggerID: Int!
var createdOn: NSDate!
var duration: Int!
var fav: Int!
var price: Double!
var text: String!
var countries: [String]!
var categories: [String]!
var deleted: Bool!
}
实际上,您可以非常简单地在代码中测试相同的行为:
创建类:
class STest: NSObject {
var idTest: Int?
var strTest: String?
}
在您的 AppDelegate 文件中:
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let testObj1 = STest()
testObj1.idTest = 1
testObj1.strTest = "test"
let objValue = testObj1 .valueForKeyPath("idTest")
return true
}
您将在let objValue = testObj1 .valueForKeyPath("idTest") 行看到崩溃
但如果你用let objValue = testObj1 .valueForKeyPath("strTest") 替换这一行,它会起作用。所以问题出在 Int 值上
【问题讨论】:
-
也许问题是 SAd 没有从 NSObject 继承?
-
我更新了描述,所以你可以看到 SAd: NSObject
-
在调用
valueForKeyPath之前,您可能还需要转换object:(object as! SAd).valueForKeyPath(field!) -
我尝试了 objectFieldValue = (object as!SAd).valueForKeyPath(field!) ,但没有帮助,我有同样的错误
-
我在操场上测试了这个,我可能没有得到同样的错误,但它让我失败了,因为 adID 声明为:Int!,当我将它设置为 var adID:Int = 2 时通过了我知道它不是真正的解决方案,而是它的东西:)
标签: ios iphone xcode swift properties