Checking updates background on database to CoreData Swift 4












0














I am developing an app of orders and I am new on it. So, I need to check for updates on my database (using Alamofire accessing my C#/Asp.net backend that checks MySQL. Also using Core Data for my SQLite).
I have been searching the best way of doing everything since few weeks ago, but I am not sure everything is on the best way. Also, I am having some issues.



1. To get changes on MySql, I am using timer to check it on background every hour and then notify user. It doesn’t work on background, just foreground. Could anyone help me, please?
The current code that works foreground, on MainViewController:



DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) {
//get most recent date from orders
let strdata = self.getMostRecentDtPedido()
if self.defaults.getDownloadInitialPedido(){
if strdata != "" {
self.loadOrdersFromLastSyncByApi(strdata)
}
}
}

var timer = Timer.scheduledTimer(withTimeInterval: 3600.0, repeats: true) {
timer in
self.backgroundTaskPerHour(timer: timer)
}
func backgroundTaskPerHour(timer:Timer) {
DispatchQueue.global(qos: DispatchQoS.background.qosClass).async {
let strdata = self.getMostRecentDtPedido()

if self.defaults.getDownloadInicialPedido(){
if strdata != "" {
self.loadOrdersFromLastSyncByApi(strdata)
}
}
}
}


2. Besides this issue, everytime I enter MainViewController, this task (from the first DispatchQueue) is dispatched again. I would like it to start just on the first time the user open the app and then per hour. What do I need to change? I thought about creating an auxiliar variable that would be set true or false if it has already gone for the first time, but I think it is too much work. I am pretty sure there is a better way of doing this.



3. Ok, after getting the updated order, Alamofire returns for me an entire order with same Id from existing. The problem is that my order has a lot of attributes and relationships with more and more attributes. I would spend a loooot of time and lines of code updating each field like “order.setValue(“(price)”, forKey: “price”)”. Since this order can update any field, it could be a quantity, date, price, status and their relationship entities. I would like, as I do on my android, to just send the entire object and swift update everything for me. I have been searching and I can’t find something like this. What I did? I get the Id, delete the old order with this Id and all its relationships and create the same again. I know this isn’t the best way. Is there another way of updating the entire object?



I don’t have anyone close to me to discuss those questions. I am new on it and I am having a lot of doubts about other functionalities as well. Is anyone available to discuss some of them, please? I just need some tips, I can search more by myself. Any help is welcome. I would be extremely grateful.










share|improve this question



























    0














    I am developing an app of orders and I am new on it. So, I need to check for updates on my database (using Alamofire accessing my C#/Asp.net backend that checks MySQL. Also using Core Data for my SQLite).
    I have been searching the best way of doing everything since few weeks ago, but I am not sure everything is on the best way. Also, I am having some issues.



    1. To get changes on MySql, I am using timer to check it on background every hour and then notify user. It doesn’t work on background, just foreground. Could anyone help me, please?
    The current code that works foreground, on MainViewController:



    DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) {
    //get most recent date from orders
    let strdata = self.getMostRecentDtPedido()
    if self.defaults.getDownloadInitialPedido(){
    if strdata != "" {
    self.loadOrdersFromLastSyncByApi(strdata)
    }
    }
    }

    var timer = Timer.scheduledTimer(withTimeInterval: 3600.0, repeats: true) {
    timer in
    self.backgroundTaskPerHour(timer: timer)
    }
    func backgroundTaskPerHour(timer:Timer) {
    DispatchQueue.global(qos: DispatchQoS.background.qosClass).async {
    let strdata = self.getMostRecentDtPedido()

    if self.defaults.getDownloadInicialPedido(){
    if strdata != "" {
    self.loadOrdersFromLastSyncByApi(strdata)
    }
    }
    }
    }


    2. Besides this issue, everytime I enter MainViewController, this task (from the first DispatchQueue) is dispatched again. I would like it to start just on the first time the user open the app and then per hour. What do I need to change? I thought about creating an auxiliar variable that would be set true or false if it has already gone for the first time, but I think it is too much work. I am pretty sure there is a better way of doing this.



    3. Ok, after getting the updated order, Alamofire returns for me an entire order with same Id from existing. The problem is that my order has a lot of attributes and relationships with more and more attributes. I would spend a loooot of time and lines of code updating each field like “order.setValue(“(price)”, forKey: “price”)”. Since this order can update any field, it could be a quantity, date, price, status and their relationship entities. I would like, as I do on my android, to just send the entire object and swift update everything for me. I have been searching and I can’t find something like this. What I did? I get the Id, delete the old order with this Id and all its relationships and create the same again. I know this isn’t the best way. Is there another way of updating the entire object?



    I don’t have anyone close to me to discuss those questions. I am new on it and I am having a lot of doubts about other functionalities as well. Is anyone available to discuss some of them, please? I just need some tips, I can search more by myself. Any help is welcome. I would be extremely grateful.










    share|improve this question

























      0












      0








      0







      I am developing an app of orders and I am new on it. So, I need to check for updates on my database (using Alamofire accessing my C#/Asp.net backend that checks MySQL. Also using Core Data for my SQLite).
      I have been searching the best way of doing everything since few weeks ago, but I am not sure everything is on the best way. Also, I am having some issues.



      1. To get changes on MySql, I am using timer to check it on background every hour and then notify user. It doesn’t work on background, just foreground. Could anyone help me, please?
      The current code that works foreground, on MainViewController:



      DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) {
      //get most recent date from orders
      let strdata = self.getMostRecentDtPedido()
      if self.defaults.getDownloadInitialPedido(){
      if strdata != "" {
      self.loadOrdersFromLastSyncByApi(strdata)
      }
      }
      }

      var timer = Timer.scheduledTimer(withTimeInterval: 3600.0, repeats: true) {
      timer in
      self.backgroundTaskPerHour(timer: timer)
      }
      func backgroundTaskPerHour(timer:Timer) {
      DispatchQueue.global(qos: DispatchQoS.background.qosClass).async {
      let strdata = self.getMostRecentDtPedido()

      if self.defaults.getDownloadInicialPedido(){
      if strdata != "" {
      self.loadOrdersFromLastSyncByApi(strdata)
      }
      }
      }
      }


      2. Besides this issue, everytime I enter MainViewController, this task (from the first DispatchQueue) is dispatched again. I would like it to start just on the first time the user open the app and then per hour. What do I need to change? I thought about creating an auxiliar variable that would be set true or false if it has already gone for the first time, but I think it is too much work. I am pretty sure there is a better way of doing this.



      3. Ok, after getting the updated order, Alamofire returns for me an entire order with same Id from existing. The problem is that my order has a lot of attributes and relationships with more and more attributes. I would spend a loooot of time and lines of code updating each field like “order.setValue(“(price)”, forKey: “price”)”. Since this order can update any field, it could be a quantity, date, price, status and their relationship entities. I would like, as I do on my android, to just send the entire object and swift update everything for me. I have been searching and I can’t find something like this. What I did? I get the Id, delete the old order with this Id and all its relationships and create the same again. I know this isn’t the best way. Is there another way of updating the entire object?



      I don’t have anyone close to me to discuss those questions. I am new on it and I am having a lot of doubts about other functionalities as well. Is anyone available to discuss some of them, please? I just need some tips, I can search more by myself. Any help is welcome. I would be extremely grateful.










      share|improve this question













      I am developing an app of orders and I am new on it. So, I need to check for updates on my database (using Alamofire accessing my C#/Asp.net backend that checks MySQL. Also using Core Data for my SQLite).
      I have been searching the best way of doing everything since few weeks ago, but I am not sure everything is on the best way. Also, I am having some issues.



      1. To get changes on MySql, I am using timer to check it on background every hour and then notify user. It doesn’t work on background, just foreground. Could anyone help me, please?
      The current code that works foreground, on MainViewController:



      DispatchQueue.main.asyncAfter(deadline: .now() + .seconds(5)) {
      //get most recent date from orders
      let strdata = self.getMostRecentDtPedido()
      if self.defaults.getDownloadInitialPedido(){
      if strdata != "" {
      self.loadOrdersFromLastSyncByApi(strdata)
      }
      }
      }

      var timer = Timer.scheduledTimer(withTimeInterval: 3600.0, repeats: true) {
      timer in
      self.backgroundTaskPerHour(timer: timer)
      }
      func backgroundTaskPerHour(timer:Timer) {
      DispatchQueue.global(qos: DispatchQoS.background.qosClass).async {
      let strdata = self.getMostRecentDtPedido()

      if self.defaults.getDownloadInicialPedido(){
      if strdata != "" {
      self.loadOrdersFromLastSyncByApi(strdata)
      }
      }
      }
      }


      2. Besides this issue, everytime I enter MainViewController, this task (from the first DispatchQueue) is dispatched again. I would like it to start just on the first time the user open the app and then per hour. What do I need to change? I thought about creating an auxiliar variable that would be set true or false if it has already gone for the first time, but I think it is too much work. I am pretty sure there is a better way of doing this.



      3. Ok, after getting the updated order, Alamofire returns for me an entire order with same Id from existing. The problem is that my order has a lot of attributes and relationships with more and more attributes. I would spend a loooot of time and lines of code updating each field like “order.setValue(“(price)”, forKey: “price”)”. Since this order can update any field, it could be a quantity, date, price, status and their relationship entities. I would like, as I do on my android, to just send the entire object and swift update everything for me. I have been searching and I can’t find something like this. What I did? I get the Id, delete the old order with this Id and all its relationships and create the same again. I know this isn’t the best way. Is there another way of updating the entire object?



      I don’t have anyone close to me to discuss those questions. I am new on it and I am having a lot of doubts about other functionalities as well. Is anyone available to discuss some of them, please? I just need some tips, I can search more by myself. Any help is welcome. I would be extremely grateful.







      swift core-data timer background alamofire






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 12 '18 at 19:11









      asrasr

      327




      327
























          0






          active

          oldest

          votes











          Your Answer






          StackExchange.ifUsing("editor", function () {
          StackExchange.using("externalEditor", function () {
          StackExchange.using("snippets", function () {
          StackExchange.snippets.init();
          });
          });
          }, "code-snippets");

          StackExchange.ready(function() {
          var channelOptions = {
          tags: "".split(" "),
          id: "1"
          };
          initTagRenderer("".split(" "), "".split(" "), channelOptions);

          StackExchange.using("externalEditor", function() {
          // Have to fire editor after snippets, if snippets enabled
          if (StackExchange.settings.snippets.snippetsEnabled) {
          StackExchange.using("snippets", function() {
          createEditor();
          });
          }
          else {
          createEditor();
          }
          });

          function createEditor() {
          StackExchange.prepareEditor({
          heartbeatType: 'answer',
          autoActivateHeartbeat: false,
          convertImagesToLinks: true,
          noModals: true,
          showLowRepImageUploadWarning: true,
          reputationToPostImages: 10,
          bindNavPrevention: true,
          postfix: "",
          imageUploader: {
          brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
          contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
          allowUrls: true
          },
          onDemand: true,
          discardSelector: ".discard-answer"
          ,immediatelyShowMarkdownHelp:true
          });


          }
          });














          draft saved

          draft discarded


















          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53268614%2fchecking-updates-background-on-database-to-coredata-swift-4%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown

























          0






          active

          oldest

          votes








          0






          active

          oldest

          votes









          active

          oldest

          votes






          active

          oldest

          votes
















          draft saved

          draft discarded




















































          Thanks for contributing an answer to Stack Overflow!


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.





          Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


          Please pay close attention to the following guidance:


          • Please be sure to answer the question. Provide details and share your research!

          But avoid



          • Asking for help, clarification, or responding to other answers.

          • Making statements based on opinion; back them up with references or personal experience.


          To learn more, see our tips on writing great answers.




          draft saved


          draft discarded














          StackExchange.ready(
          function () {
          StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53268614%2fchecking-updates-background-on-database-to-coredata-swift-4%23new-answer', 'question_page');
          }
          );

          Post as a guest















          Required, but never shown





















































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown

































          Required, but never shown














          Required, but never shown












          Required, but never shown







          Required, but never shown







          Popular posts from this blog

          Florida Star v. B. J. F.

          Danny Elfman

          Lugert, Oklahoma