gpt4 book ai didi

ios - MVC - 没有 UIKit 的模型文件中的 NSFetchRequest

转载 作者:行者123 更新时间:2023-11-28 16:16:14 26 4
gpt4 key购买 nike

在我的 ViewController 中,我有一个函数可以获取所有“headingNumbers”(实体“Vocabulary”的一个属性)。我知道这不是好的 MVC 实践。

所以我创建了一个新的 swift 文件。我没有导入 UIKit。 Youtube Stanford - Developing iOS 9 Apps with Swift - 2, 22:53:“切勿在模型文件中导入 UI KIT,因为该模型独立于 UI”
( https://www.youtube.com/watch?v=j50mPzDMWVQ )

但是,现在我收到这些消息,例如“使用未解析的标识符‘UIApplication’”。这是有道理的,因为我没有导入 UIKit。问题是:我现在如何在我的新 swift 文件中执行提取请求。
(你现在可能是这样,我是初学者)

import Foundation
import CoreData

class QueryData {

private var selectedHeadingNumber:String = "-123456789"
private var setOfHeadingNumbers:[String] = [String]()

func getHeadingNumbers2() -> [String] {


if let managedObjectContext = (UIApplication.sharedApplication().delegate as? AppDelegate)?.managedObjectContext {

// Create Fetch Request
let fetchRequest = NSFetchRequest(entityName: "Vocabulary")

// Add Sort Descriptor
let sortDescriptor = NSSortDescriptor(key: "headingNumber", ascending: true)
fetchRequest.sortDescriptors = [sortDescriptor]

// Execute Fetch Request
do {
let result = try managedObjectContext.executeFetchRequest(fetchRequest)

for managedObject in result {
if let foundHeadingNumber = managedObject.valueForKey("headingNumber") {

if let result_number = foundHeadingNumber as? NSNumber
{
let result_string = "\(result_number)"

if !setOfHeadingNumbers.contains(result_string) {
print("Headingnumber: \(foundHeadingNumber) ")
setOfHeadingNumbers.append(result_string)

print("updated selectedHeadingNumber: ", selectedHeadingNumber)
selectedHeadingNumber = result_string

// set the default lessonnumber to the first lesson
if selectedHeadingNumber == "-123456789" {
selectedHeadingNumber = result_string
print("updated selectedHeadingNumber: ", selectedHeadingNumber)
}
}

}

//setOfHeadingNumbers.append(first)
}
}

} catch {
let fetchError = error as NSError
print(fetchError)
}

} // end of if statement

return setOfHeadingNumbers

} // end of func

} // end of class

最佳答案

你真正需要的是NSManagedObjectContex。将其作为参数传递给方法:

func getHeadingNumbers2(inContext context: NSManagedObjectContext) -> [String]
{
...
}

或者将它作为依赖注入(inject)到初始化器中

class QueryData
{
let context: NSManagedObjectContext

init(context: NSManagedObjectContext)
{
self.context = context
}

func getHeadingNumbers2() -> [String]
{
let fetchRequest = NSFetchRequest(entityName: "Vocabulary")
let result = try self.context.executeFetchRequest(fetchRequest)
...
}
}

关于ios - MVC - 没有 UIKit 的模型文件中的 NSFetchRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39051861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com