Checking updates background on database to CoreData Swift 4
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
add a comment |
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
add a comment |
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
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
swift core-data timer background alamofire
asked Nov 12 '18 at 19:11
asrasr
327
327
add a comment |
add a comment |
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
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
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.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
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
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
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