Getting access to EKCalendar









up vote
0
down vote

favorite












In my app, I have a switch that allows the user to put certain events in their agenda. I handle that as such:



@IBAction func putInAgenda(_ sender: UISwitch) 
let store = manager.store
if (sender.isOn)
store.requestAccess(to: EKEntityType.event, completion:
(accessGranted: Bool, error: Error?) in
if accessGranted == true
self.eventsHandler.importEventsInAgenda(id)
else
DispatchQueue.main.async
sender.isOn = false


)
else
//


shared?.set(sender.isOn, forKey: "putInAgenda")
shared?.synchronize()



However, against my expectation, "store.requestAccess" not only requests, but also SETS.



As a result, when the user CANCELS the dialog, the switch switches back (expected) but any consecutive attempt to switch the switch to the ON position is honored with an OFF position, without a new dialog.



What should I do?










share|improve this question





















  • Unrelated but the call to synchronize is obsolete. See its documentation.
    – rmaddy
    Nov 10 at 17:08














up vote
0
down vote

favorite












In my app, I have a switch that allows the user to put certain events in their agenda. I handle that as such:



@IBAction func putInAgenda(_ sender: UISwitch) 
let store = manager.store
if (sender.isOn)
store.requestAccess(to: EKEntityType.event, completion:
(accessGranted: Bool, error: Error?) in
if accessGranted == true
self.eventsHandler.importEventsInAgenda(id)
else
DispatchQueue.main.async
sender.isOn = false


)
else
//


shared?.set(sender.isOn, forKey: "putInAgenda")
shared?.synchronize()



However, against my expectation, "store.requestAccess" not only requests, but also SETS.



As a result, when the user CANCELS the dialog, the switch switches back (expected) but any consecutive attempt to switch the switch to the ON position is honored with an OFF position, without a new dialog.



What should I do?










share|improve this question





















  • Unrelated but the call to synchronize is obsolete. See its documentation.
    – rmaddy
    Nov 10 at 17:08












up vote
0
down vote

favorite









up vote
0
down vote

favorite











In my app, I have a switch that allows the user to put certain events in their agenda. I handle that as such:



@IBAction func putInAgenda(_ sender: UISwitch) 
let store = manager.store
if (sender.isOn)
store.requestAccess(to: EKEntityType.event, completion:
(accessGranted: Bool, error: Error?) in
if accessGranted == true
self.eventsHandler.importEventsInAgenda(id)
else
DispatchQueue.main.async
sender.isOn = false


)
else
//


shared?.set(sender.isOn, forKey: "putInAgenda")
shared?.synchronize()



However, against my expectation, "store.requestAccess" not only requests, but also SETS.



As a result, when the user CANCELS the dialog, the switch switches back (expected) but any consecutive attempt to switch the switch to the ON position is honored with an OFF position, without a new dialog.



What should I do?










share|improve this question













In my app, I have a switch that allows the user to put certain events in their agenda. I handle that as such:



@IBAction func putInAgenda(_ sender: UISwitch) 
let store = manager.store
if (sender.isOn)
store.requestAccess(to: EKEntityType.event, completion:
(accessGranted: Bool, error: Error?) in
if accessGranted == true
self.eventsHandler.importEventsInAgenda(id)
else
DispatchQueue.main.async
sender.isOn = false


)
else
//


shared?.set(sender.isOn, forKey: "putInAgenda")
shared?.synchronize()



However, against my expectation, "store.requestAccess" not only requests, but also SETS.



As a result, when the user CANCELS the dialog, the switch switches back (expected) but any consecutive attempt to switch the switch to the ON position is honored with an OFF position, without a new dialog.



What should I do?







swift calendar access






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 at 16:54









Sjakelien

87521129




87521129











  • Unrelated but the call to synchronize is obsolete. See its documentation.
    – rmaddy
    Nov 10 at 17:08
















  • Unrelated but the call to synchronize is obsolete. See its documentation.
    – rmaddy
    Nov 10 at 17:08















Unrelated but the call to synchronize is obsolete. See its documentation.
– rmaddy
Nov 10 at 17:08




Unrelated but the call to synchronize is obsolete. See its documentation.
– rmaddy
Nov 10 at 17:08












1 Answer
1






active

oldest

votes

















up vote
0
down vote



accepted










A privacy request is only ever asked once. If you detect that it is currently denied, you could either update the UI or prompt the user to go to Settings and turn it on. You can use UIApplication openSettingsURLString and UIApplication openURL to take the user to your app's settings page in the Settings app.






share|improve this answer




















    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',
    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%2f53241222%2fgetting-access-to-ekcalendar%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes








    up vote
    0
    down vote



    accepted










    A privacy request is only ever asked once. If you detect that it is currently denied, you could either update the UI or prompt the user to go to Settings and turn it on. You can use UIApplication openSettingsURLString and UIApplication openURL to take the user to your app's settings page in the Settings app.






    share|improve this answer
























      up vote
      0
      down vote



      accepted










      A privacy request is only ever asked once. If you detect that it is currently denied, you could either update the UI or prompt the user to go to Settings and turn it on. You can use UIApplication openSettingsURLString and UIApplication openURL to take the user to your app's settings page in the Settings app.






      share|improve this answer






















        up vote
        0
        down vote



        accepted







        up vote
        0
        down vote



        accepted






        A privacy request is only ever asked once. If you detect that it is currently denied, you could either update the UI or prompt the user to go to Settings and turn it on. You can use UIApplication openSettingsURLString and UIApplication openURL to take the user to your app's settings page in the Settings app.






        share|improve this answer












        A privacy request is only ever asked once. If you detect that it is currently denied, you could either update the UI or prompt the user to go to Settings and turn it on. You can use UIApplication openSettingsURLString and UIApplication openURL to take the user to your app's settings page in the Settings app.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 10 at 17:07









        rmaddy

        235k27305371




        235k27305371



























             

            draft saved


            draft discarded















































             


            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53241222%2fgetting-access-to-ekcalendar%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







            這個網誌中的熱門文章

            Barbados

            How to read a connectionString WITH PROVIDER in .NET Core?

            Node.js Script on GitHub Pages or Amazon S3