Should I use NSUserDefault or CoreData for saving the last ten scores?












0















Right now I have a struct with multiple dictionaries and string that holds the user's score for each level and the user's name that they type. I then save the struct scores into an NSUserdefault.



struct Scores: Codable {
var userName: String = ""
var totalScore: Int = 0
var highScore: [String : Int] = [:]
var scoreA: [String : Int] = [:]
var scoreB: [String : Int] = [:]
}

UserDefaults.standard.set(try? PropertyListEncoder().encode(scores), forKey:"scores_1")


This works well but I will need to save the user's last ten scores. I am wondering if I should use core-data or keep using NSUserdefaults? Not sure which is best practice.



Edit: Should I save the data in a .json file?










share|improve this question

























  • So basically we are talking about an array of 10 dictinarios, well personally I'd definitely choose UserDefaults...

    – Ahmad F
    Jan 1 at 21:45






  • 4





    Neither. It is not a user preference; it is the app’s data. But CoreData is way overkill. Just write it to a file.

    – matt
    Jan 1 at 21:52











  • @matt You mean like this? stackoverflow.com/questions/37756121/…

    – Curt Rand
    Jan 1 at 21:56
















0















Right now I have a struct with multiple dictionaries and string that holds the user's score for each level and the user's name that they type. I then save the struct scores into an NSUserdefault.



struct Scores: Codable {
var userName: String = ""
var totalScore: Int = 0
var highScore: [String : Int] = [:]
var scoreA: [String : Int] = [:]
var scoreB: [String : Int] = [:]
}

UserDefaults.standard.set(try? PropertyListEncoder().encode(scores), forKey:"scores_1")


This works well but I will need to save the user's last ten scores. I am wondering if I should use core-data or keep using NSUserdefaults? Not sure which is best practice.



Edit: Should I save the data in a .json file?










share|improve this question

























  • So basically we are talking about an array of 10 dictinarios, well personally I'd definitely choose UserDefaults...

    – Ahmad F
    Jan 1 at 21:45






  • 4





    Neither. It is not a user preference; it is the app’s data. But CoreData is way overkill. Just write it to a file.

    – matt
    Jan 1 at 21:52











  • @matt You mean like this? stackoverflow.com/questions/37756121/…

    – Curt Rand
    Jan 1 at 21:56














0












0








0


2






Right now I have a struct with multiple dictionaries and string that holds the user's score for each level and the user's name that they type. I then save the struct scores into an NSUserdefault.



struct Scores: Codable {
var userName: String = ""
var totalScore: Int = 0
var highScore: [String : Int] = [:]
var scoreA: [String : Int] = [:]
var scoreB: [String : Int] = [:]
}

UserDefaults.standard.set(try? PropertyListEncoder().encode(scores), forKey:"scores_1")


This works well but I will need to save the user's last ten scores. I am wondering if I should use core-data or keep using NSUserdefaults? Not sure which is best practice.



Edit: Should I save the data in a .json file?










share|improve this question
















Right now I have a struct with multiple dictionaries and string that holds the user's score for each level and the user's name that they type. I then save the struct scores into an NSUserdefault.



struct Scores: Codable {
var userName: String = ""
var totalScore: Int = 0
var highScore: [String : Int] = [:]
var scoreA: [String : Int] = [:]
var scoreB: [String : Int] = [:]
}

UserDefaults.standard.set(try? PropertyListEncoder().encode(scores), forKey:"scores_1")


This works well but I will need to save the user's last ten scores. I am wondering if I should use core-data or keep using NSUserdefaults? Not sure which is best practice.



Edit: Should I save the data in a .json file?







swift core-data struct nsuserdefaults






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Jan 1 at 22:56







Curt Rand

















asked Jan 1 at 21:33









Curt RandCurt Rand

328315




328315













  • So basically we are talking about an array of 10 dictinarios, well personally I'd definitely choose UserDefaults...

    – Ahmad F
    Jan 1 at 21:45






  • 4





    Neither. It is not a user preference; it is the app’s data. But CoreData is way overkill. Just write it to a file.

    – matt
    Jan 1 at 21:52











  • @matt You mean like this? stackoverflow.com/questions/37756121/…

    – Curt Rand
    Jan 1 at 21:56



















  • So basically we are talking about an array of 10 dictinarios, well personally I'd definitely choose UserDefaults...

    – Ahmad F
    Jan 1 at 21:45






  • 4





    Neither. It is not a user preference; it is the app’s data. But CoreData is way overkill. Just write it to a file.

    – matt
    Jan 1 at 21:52











  • @matt You mean like this? stackoverflow.com/questions/37756121/…

    – Curt Rand
    Jan 1 at 21:56

















So basically we are talking about an array of 10 dictinarios, well personally I'd definitely choose UserDefaults...

– Ahmad F
Jan 1 at 21:45





So basically we are talking about an array of 10 dictinarios, well personally I'd definitely choose UserDefaults...

– Ahmad F
Jan 1 at 21:45




4




4





Neither. It is not a user preference; it is the app’s data. But CoreData is way overkill. Just write it to a file.

– matt
Jan 1 at 21:52





Neither. It is not a user preference; it is the app’s data. But CoreData is way overkill. Just write it to a file.

– matt
Jan 1 at 21:52













@matt You mean like this? stackoverflow.com/questions/37756121/…

– Curt Rand
Jan 1 at 21:56





@matt You mean like this? stackoverflow.com/questions/37756121/…

– Curt Rand
Jan 1 at 21:56












1 Answer
1






active

oldest

votes


















0














UserDefaults is best used to store small amounts of data, and not arrays.



Every time you call the key, the entire plist file that it's stored in is called into memory.



eg)



let volumeLevel = UserDefaults.Standard.integer(forKey: "volume")


So if you are storing an array that grows every time the user plays, eventually you will have memory problems.



With the example you have above, using UserDefaults to store High Score and UserName is fine, but I would recommend using CoreData (or something else) to store an array that has data for each run of the game.






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',
    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%2f53999108%2fshould-i-use-nsuserdefault-or-coredata-for-saving-the-last-ten-scores%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









    0














    UserDefaults is best used to store small amounts of data, and not arrays.



    Every time you call the key, the entire plist file that it's stored in is called into memory.



    eg)



    let volumeLevel = UserDefaults.Standard.integer(forKey: "volume")


    So if you are storing an array that grows every time the user plays, eventually you will have memory problems.



    With the example you have above, using UserDefaults to store High Score and UserName is fine, but I would recommend using CoreData (or something else) to store an array that has data for each run of the game.






    share|improve this answer




























      0














      UserDefaults is best used to store small amounts of data, and not arrays.



      Every time you call the key, the entire plist file that it's stored in is called into memory.



      eg)



      let volumeLevel = UserDefaults.Standard.integer(forKey: "volume")


      So if you are storing an array that grows every time the user plays, eventually you will have memory problems.



      With the example you have above, using UserDefaults to store High Score and UserName is fine, but I would recommend using CoreData (or something else) to store an array that has data for each run of the game.






      share|improve this answer


























        0












        0








        0







        UserDefaults is best used to store small amounts of data, and not arrays.



        Every time you call the key, the entire plist file that it's stored in is called into memory.



        eg)



        let volumeLevel = UserDefaults.Standard.integer(forKey: "volume")


        So if you are storing an array that grows every time the user plays, eventually you will have memory problems.



        With the example you have above, using UserDefaults to store High Score and UserName is fine, but I would recommend using CoreData (or something else) to store an array that has data for each run of the game.






        share|improve this answer













        UserDefaults is best used to store small amounts of data, and not arrays.



        Every time you call the key, the entire plist file that it's stored in is called into memory.



        eg)



        let volumeLevel = UserDefaults.Standard.integer(forKey: "volume")


        So if you are storing an array that grows every time the user plays, eventually you will have memory problems.



        With the example you have above, using UserDefaults to store High Score and UserName is fine, but I would recommend using CoreData (or something else) to store an array that has data for each run of the game.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 1 at 23:48









        JaneJane

        346211




        346211
































            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.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53999108%2fshould-i-use-nsuserdefault-or-coredata-for-saving-the-last-ten-scores%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

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas

            Can't read property showImagePicker of undefined in react native iOS