在我的swift代码中,我试图打印从核心数据属性atBATS获取的数组中的第3项。代码中也有一个排序描述符。现在代码打印所有的名字,只打印第三个名字。假设数组中有3个元素
func printStrings() {
let appD = UIApplication.shared.delegate as! AppDelegate
let context = appD.persistentContainer.viewContext
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Data")
request.returnsObjectsAsFaults = false
do {
let result = try context.fetch(request)
var retrievedData = [String]()
for data in result as! [NSManagedObject] {
let sort = NSSortDescriptor(key: "atBATS", ascending: false)
request.sortDescriptors = [sort]
if let value = data.value(forKey: "atBATS") as? String {
retrievedData.append((value))
}
}
print(retrievedData)
} catch {
print("Failed")
}
}
首先不要将自定义结构体或类命名为Data
。它会干扰基金会Data
。
排序描述符在错误的位置。它必须附加在之前的获取请求上。获取数据
你的代码已经过时了。总是使用NSManagedObject
的子类。在下面的代码中,我将类命名为MyData
func printStrings() {
let appD = UIApplication.shared.delegate as! AppDelegate
let context = appD.persistentContainer.viewContext
let request : NSFetchRequest<MyData> = MyData.fetchRequest()
request.sortDescriptors = [NSSortDescriptor(key: "atBATS", ascending: false)]
do {
let result = try context.fetch(request)
let atBATS = result.map(.atBATS)
if atBATS.count > 2 {
print(atBATS[2])
} else {
print("There are less than 3 items")
}
} catch {
print(error)
}
}