CoreData上下文没有更新,bool总是假的?

时间:2018-05-15 10:14:12

标签: core-data swift4

我正在尝试使用coredata中的布尔值更新用户记录。记录本身正在更新,但我只能看到应用会话之间的变化,而不是相同的会话。

基本上,我试图阻止用户同意或拒绝应用程序的使用条款。登录后在登陆屏幕上执行检查,如果条款已经同意,则继续正常进行。但是,如果条款尚未达成一致,那么我需要触发一个弹出窗口,允许他们接受这些条款(每当他们到达目标网页时都会发生这种情况,直到他们接受为止)

  1. 我正在运行检查,但无论核心数据记录中的值是什么,它总是评估为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();
        }
    }
    
  2. 当用户接受这些条款时,我会尝试更新核心数据记录。哪个更新,但我只能看到应用程序会话之间的更新。在同一会话中,如果用户再次点击着陆屏幕,则该值仍设置为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") } 但似乎都没有任何效果。

  3. **使用AppDelegate **中的保存代码进行更新

    automaticallyMergesChangesFromParent

0 个答案:

没有答案