현재 Swift에서 개발 된 iOS 앱을 개발 중이며 사용자가 만든 일부 콘텐츠를 장치에 저장해야하지만 사용자 콘텐츠를 장치에 저장 / 수신하는 간단하고 빠른 방법을 찾지 못하는 것 같습니다.
누군가 로컬 저장소를 저장하고 액세스하는 방법을 설명 할 수 있습니까?
아이디어는 사용자가 작업을 실행할 때 데이터를 저장하고 앱이 시작될 때 데이터를받는 것입니다.
답변
두 개의 문자열 만 저장하는 경우 가장 간단한 해결책 NSUserDefaults
은 Swift 3에서이 클래스의 이름이 just로 바뀌는 것 UserDefaults
입니다.
코드의 다른 곳에서 키를 재사용 할 수 있도록 전 세계 어딘가에 키를 저장하는 것이 가장 좋습니다.
struct defaultsKeys {
static let keyOne = "firstStringKey"
static let keyTwo = "secondStringKey"
}
스위프트 3.0, 4.0 및 5.0
// Setting
let defaults = UserDefaults.standard
defaults.set("Some String Value", forKey: defaultsKeys.keyOne)
defaults.set("Another String Value", forKey: defaultsKeys.keyTwo)
// Getting
let defaults = UserDefaults.standard
if let stringOne = defaults.string(forKey: defaultsKeys.keyOne) {
print(stringOne) // Some String Value
}
if let stringTwo = defaults.string(forKey: defaultsKeys.keyTwo) {
print(stringTwo) // Another String Value
}
스위프트 2.0
// Setting
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject("Some String Value", forKey: defaultsKeys.keyOne)
defaults.setObject("Another String Value", forKey: defaultsKeys.keyTwo)
// Getting
let defaults = NSUserDefaults.standardUserDefaults()
if let stringOne = defaults.stringForKey(defaultsKeys.keyOne) {
print(stringOne) // Some String Value
}
if let stringTwo = defaults.stringForKey(defaultsKeys.keyTwo) {
print(stringTwo) // Another String Value
}
사소한 구성, 플래그 또는 기본 문자열보다 더 심각한 경우에는 일종의 영구 저장소를 사용해야합니다. 현재 인기있는 옵션은 Realm 이지만 SQLite 또는 Apple 자체의 CoreData 를 사용할 수도 있습니다 .
답변
NSUserDefaults를 사용한다고 말합니다.
처음 (앱 종료 후) 데이터 스토리지를 처음 구현할 때 온라인에서 읽은 모든 내용이 NSUserDefaults를 가리 켰습니다. 그러나 사전을 저장하고 싶었지만 가능한 한 고통 스럽습니다. 나는 유형 오류를 없애려고 몇 시간을 보냈습니다.
NSUserDefaults도 기능이 제한됩니다
더 읽어 보면 NSUserDefaults의 읽기 / 쓰기가 실제로 앱이 모든 것을 읽거나 쓰지 못하게하는 방법을 보여 주었으므로 효율적이지 않습니다. 그런 다음 배열 검색이 간단하지 않다는 것을 알게되었습니다. 문자열이나 부울을 몇 개 이상 저장하면 NSUserDefaults가 이상적이지 않다는 것을 깨달았습니다.
또한 확장 할 수 없습니다. 코딩 방법을 배우고 있다면 확장 가능한 방법을 배우십시오. 기본 설정과 관련된 간단한 문자열 또는 부울을 저장하는 데 NSUserDefaults 만 사용하십시오. Core Data를 사용하여 어레이 및 기타 데이터를 저장하십시오. 작은 것부터 시작하십시오.
업데이트 : 또한 Apple Watch 지원을 추가하면 또 다른 잠재적 고려 사항이 있습니다. 이제 앱의 NSUserDefaults가 Watch Extension으로 자동 전송됩니다.
핵심 데이터 사용
그래서 Core Data가 더 어려운 솔루션이라는 경고를 무시하고 읽기 시작했습니다. 세 시간 안에 나는 그것을 작동시켰다. 테이블 배열을 Core Data에 저장하고 앱을 다시 열면 데이터를 다시로드했습니다! 튜토리얼 코드는 쉽게 적응할 수 있었고 약간의 추가 실험만으로 제목과 세부 배열을 모두 저장할 수있었습니다.
따라서 NSUserDefault 유형 문제로 어려움을 겪고 있거나 문자열을 저장하는 것 이상이 필요한이 게시물을 읽는 사람이라면 코어 데이터를 가지고 한두 시간을 소비하는 것을 고려하십시오.
내가 읽은 튜토리얼은 다음과 같습니다.
http://www.raywenderlich.com/85578/first-core-data-app-using-swift
“핵심 데이터”를 확인하지 않은 경우
앱을 만들 때 “핵심 데이터”를 확인하지 않은 경우 앱을 추가 한 후 5 분만에 추가 할 수 있습니다.
http://craig24.com/2014/12/how-to-add-core-data-to-an-existing-swift-project-in-xcode/
http://blog.zeityer.com/post/119012600864/adding-core-data-to-an-existing-swift-project
핵심 데이터 목록에서 삭제하는 방법
답변
@bploat 와 http://www.codingexplorer.com/nsuserdefaults-a-swift-introduction/에 대한 링크 덕분에 좋아요
기본 문자열 저장에 대한 대답이 매우 간단하다는 것을 알았습니다.
let defaults = NSUserDefaults.standardUserDefaults()
// Store
defaults.setObject("theGreatestName", forKey: "username")
// Receive
if let name = defaults.stringForKey("username")
{
print(name)
// Will output "theGreatestName"
}
답변
NSCoding과 NSKeyedArchiver를 사용 하는 것은 너무 복잡 NSUserDefaults
하지만 CoreData가 과도하게 사용되는 데이터에 대한 또 다른 훌륭한 옵션입니다 . 또한 파일 구조를보다 명시 적으로 관리 할 수있는 기회를 제공하므로 암호화를 사용하려는 경우 유용합니다.
답변
Swift 4.0의 경우 더 쉬워졌습니다.
let defaults = UserDefaults.standard
//Set
defaults.set(passwordTextField.text, forKey: "Password")
//Get
let myPassword = defaults.string(forKey: "Password")
답변
스위프트 3.0
세터 : 로컬 스토리지
let authtoken = "12345"
// Userdefaults helps to store session data locally
let defaults = UserDefaults.standard
defaults.set(authtoken, forKey: "authtoken")
defaults.synchronize()
게터 : 로컬 스토리지
if UserDefaults.standard.string(forKey: "authtoken") != nil {
//perform your task on success }
답변
스위프트 3
UserDefaults.standard.setValue(token, forKey: "user_auth_token")
print("\(UserDefaults.standard.value(forKey: "user_auth_token")!)")