我一直无法找到任何有助于这个主题的信息,而且我有点新,自学成才,对任何无知道歉。我正在制作一个联系方式应用程序,允许您记录与特定人员进行的访问。我正在使用Core Data来存储数据,并且具有将Person实体链接到Visit实体的一对多关系。
当我从主要联系人列表中选择一个特定的人时,我将该人的nsmanagedobject传递给新的视图控制器,并在获取我对该人进行的访问时将其用作我的谓词。
问题来自于此时的国家恢复。我希望能够返回到这个人的页面(以及整个应用程序中的一些其他实例,但是这个例子涵盖了这个问题)但是因为我通过segue传递了Person对象,那个对象现在是nil,这导致我的应用程序崩溃两次,然后它启动到主屏幕,似乎清除和恢复数据。
无论我尝试存储在encoderestorablestate:with,按home,然后在xcode中停止应用程序然后重新启动xcode,在此之前,从未调用decoderestorablestate func并且崩溃的人为nil。
下面是我的fetchedresultscontroller,崩溃发生在谓词行上,说self.person是nil
lazy var fetchedResultsController: NSFetchedResultsController<Visit> = {
// Initialize Fetch Request
let fetchRequest: NSFetchRequest<NSManagedObject> = NSFetchRequest(entityName: "Visit")
// Add Sort Descriptors
let predicate = NSPredicate(format: "person == %@", self.person!)
fetchRequest.predicate = predicate
let sortDescriptor = NSSortDescriptor(key: "date", ascending: false)
fetchRequest.sortDescriptors = [sortDescriptor]
// Initialize Fetched Results Controller
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: self.managedObjectContext, sectionNameKeyPath: nil, cacheName: nil)
// Configure Fetched Results Controller
fetchedResultsController.delegate = self
return fetchedResultsController as! NSFetchedResultsController<Visit>
}()
我将完美地重申这一切,并且正如预期的那样,当从顶部使用应用程序时,它只会在尝试恢复状态时崩溃。
我已经做了很多不同的尝试,将什么放在encoderestorablestate中,但没有任何东西阻止崩溃。这似乎会出现很多事情,但我找不到任何信息让我感到困惑。
感谢您的时间。
答案 0 :(得分:0)
您没有提供足够的信息来追踪问题,但这是查看问题的一般方法。将问题分为三个部分:
您有一个实现var temp123;
pdfDoc.pipe(temp123 = fs.createWriteStream('./PDF/' + name), { encoding:'utf16' });
pdfDoc.end();
temp123.on('finish', async function () {
// do send PDF file
res.download('name.pdf');
});`
的恢复类。这是配置您正在提供的视图控制器的机会。
视图控制器已发送viewController(withRestorationIdentifierPath:coder:)
。这是配置视图控制器的另一个机会。请注意,这是 decodeRestorableState(with:)
后的。
视图控制器已发送viewDidLoad
。这是配置视图控制器的最后机会。
现在让我们考虑一下如何更新此视图控制器上的界面。时机很棘手,因为你不知道时机会是什么。特别是,您可能在applicationFinishedRestoringState
中拥有代码,该代码假定已设置所有属性,并相应地配置接口。但在这种情况下,他们可能已经没有设置。
因此,要使状态恢复正常工作,您需要将viewDidLoad
代码重写为不做任何关于是否已设置属性的假设。
在您的情况下,那将是viewDidLoad
。在self.person
中,您需要检查viewDidLoad
,如果是self.person
,请不要尝试制作您获取的结果控制器。然后nil
出现,现在您可能已配置applicationFinishedRestoringState
(在self.person
中),您可以通过获取的结果控制器更新界面。< / p>