gpt4 book ai didi

ios - NSFetchedResultsController 未解析的标识符 Swift 4

转载 作者:行者123 更新时间:2023-11-29 00:06:44 26 4
gpt4 key购买 nike

我收到了这个奇怪的“使用未解析的标识符”警告,即使我在上面的行中声明了 var。

这里发生了什么?这是我的代码:

var fetchedResultsController: NSFetchedResultsController<Project> {

if _fetchedResultsController != nil {
return _fetchedResultsController
}

let fetchRequest: NSFetchRequest<Project> = Project.fetchRequest()

fetchRequest.fetchBatchSize = 20

let sortDescriptor = NSSortDescriptor(key: "name", ascending: false)

fetchRequest.sortDescriptors = [sortDescriptor]

let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: nil, cacheName: "Master")
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController

do {
try _fetchedResultsController.performFetch()
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
//println("Unresolved error \(error), \(error.userInfo)")
abort()
}

return _fetchedResultsController!
}

这是来自 Apple 模板项目的代码,没有警告或错误:

 var fetchedResultsController: NSFetchedResultsController<Event> {

if _fetchedResultsController != nil {
return _fetchedResultsController!
}

let fetchRequest: NSFetchRequest<Event> = Event.fetchRequest()

// Set the batch size to a suitable number.
fetchRequest.fetchBatchSize = 20

// Edit the sort key as appropriate.
let sortDescriptor = NSSortDescriptor(key: "timestamp", ascending: false)

fetchRequest.sortDescriptors = [sortDescriptor]

// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: nil, cacheName: "Master")
aFetchedResultsController.delegate = self
_fetchedResultsController = aFetchedResultsController

do {
try _fetchedResultsController!.performFetch()
} catch {
// Replace this implementation with code to handle the error appropriately.
// fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
let nserror = error as NSError
fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
}

return _fetchedResultsController!
}

我开始认为它可能与我创建的 CoreData 实体(类)(项目)有关。尽管它是一个具有一个属性(名称)的简单实体 - 模板项目也有一个具有一个属性(时间戳)的实体(事件)。

我的 CoreData 的“工具版本”设置为自动 (XCode 9.0),“代码生成”设置为 Swift。

我注意到的另一件事是 XCode 有时无法识别我的实体(项目),我必须重新启动才能解决该问题。

XCode 9 是否被证明存在 CoreData 问题?

最佳答案

看起来您正在尝试创建 NSFetchedResultsController 的单例实例或尝试仅初始化一次 NSFetchedResultsController

问题:

直接在其 getter 中访问该属性将导致无限循环,应用程序将崩溃。

解决方案:

可能您只需要惰性变量

lazy var fetchedResultsController : NSFetchedResultsController<Project> = {
let localFetchedResultsController : NSFetchedResultsController< Project > = //initialize your fetched results controller
return localFetchedResultsController
}()

这将确保 fetchedResultsController 只被初始化一次并再次返回相同的实例。除非您有意通过调用来更改实例本身

self.fetchedResultsController = //some_new_fetchedResultsController_instance

希望对你有帮助

编辑 1:

为什么不试试

lazy var fetchedResultsController : NSFetchedResultsController<Project> = {
let fetchRequest: NSFetchRequest<Project> = Project.fetchRequest()
fetchRequest.fetchBatchSize = 20
let sortDescriptor = NSSortDescriptor(key: "name", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]

let aFetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext!, sectionNameKeyPath: nil, cacheName: "Master")
aFetchedResultsController.delegate = self

do {
try aFetchedResultsController.performFetch()
} catch {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
//println("Unresolved error \(error), \(error.userInfo)")
abort()
}

return aFetchedResultsController!
}()

关于ios - NSFetchedResultsController 未解析的标识符 Swift 4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47809244/

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