Should I use NSUserDefault or CoreData for saving the last ten scores?
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
add a comment |
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
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
add a comment |
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
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
swift core-data struct nsuserdefaults
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
add a comment |
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
add a comment |
1 Answer
1
active
oldest
votes
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.
add a comment |
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%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
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.
add a comment |
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.
add a comment |
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.
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.
answered Jan 1 at 23:48
JaneJane
346211
346211
add a comment |
add a comment |
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%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
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
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