我正在尝试使用coredata中的布尔值更新用户记录。记录本身正在更新,但我只能看到应用会话之间的变化,而不是相同的会话。
基本上,我试图阻止用户同意或拒绝应用程序的使用条款。登录后在登陆屏幕上执行检查,如果条款已经同意,则继续正常进行。但是,如果条款尚未达成一致,那么我需要触发一个弹出窗口,允许他们接受这些条款(每当他们到达目标网页时都会发生这种情况,直到他们接受为止)
我正在运行检查,但无论核心数据记录中的值是什么,它总是评估为false:
public partial class MainWindow : Window, IDisposable
{
private Timer _t;
public MainWindow()
{
Closing += OnClosing;
}
private void OnClosing(object sender, System.ComponentModel.CancelEventArgs e)
{
Dispose(true);
}
private void Button_Click(object sender, RoutedEventArgs e)
{
if(_t != null)
_t.Dispose();
_t = new Timer(DoingWork, null, 0, 5000);
}
private void DoingWork(object state)
{
//....
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
protected virtual void Dispose(bool disposing)
{
if (disposing && _t != null)
_t.Dispose();
}
}
当用户接受这些条款时,我会尝试更新核心数据记录。哪个更新,但我只能看到应用程序会话之间的更新。在同一会话中,如果用户再次点击着陆屏幕,则该值仍设置为false(或者至少核心数据中的acceptedTerms字段仍为0) - 我已经对此进行了一些搜索并看到有{ {1}}以及 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
context.automaticallyMergesChangesFromParent = true
let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "User")
fetchRequest.predicate = NSPredicate(format: "email == %@", userEmail)
fetchRequest.returnsObjectsAsFaults = false
do {
userRecord = try context.fetch(User.fetchRequest())
if userRecord[0].acceptedTerms != nil && userRecord[0].acceptedTerms {
print("Terms accepted, move along")
} else {
print("Terms refused, pop dialog")
}
} catch {
print("No user found")
}
但似乎都没有任何效果。
**使用AppDelegate **中的保存代码进行更新
automaticallyMergesChangesFromParent