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值
也許問題是難過的是沒有從NSObject的繼承? – Vlk
我更新了描述,所以你可以看到SAd:NSObject –
可能你必須在調用'valueForKeyPath'之前施加'object':'(object as!SAd).valueForKeyPath(field!)' – vadian