NSUser 기본값으로 배열을 저장하고 읽는 방법을 신속하게 선택할 수 있습니까?
Swift의 사전처럼 이 형식의 개체를 추가하려면 배열을 만들어야 합니다: ["key1": "value1", "key2": "value2"]
내가 그것을 저장할 때NSUserDefaults
모든 것이 옳지만,NSUserDefaults
열쇠로 이것이 충돌합니다.내 varobj에는 어떤 유형의 데이터가 필요합니까?
let def = NSUserDefaults.standardUserDefaults()
var key = "keySave"
var element: AnyObject!
var array1: [AnyObject!] = []
array1.append(["key1": "val1", "key2": "val2"])
array1.append(["key1": "val1", "key2": "val2"])
//save
var savestring : [AnyObject!]
savestring = array1
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(savestring, forKey: key)
defaults.synchronize()
//read
var obj: [AnyObject!] = []
if(obj != nil){
print("size: ")
print(obj.count) //vary long value confused..
element = obj[0] //crash
print(element.objectForKey("key1"))
}
질문은 "어레이 배열"로 되어 있지만 대부분의 사람들은 단지 어레이를 저장하는 방법을 알고 싶어 여기에 올 것이라고 생각합니다.UserDefaults
그러한 사람들을 위해 저는 몇 가지 일반적인 예를 추가할 것입니다.
문자열 배열
배열 저장
let array = ["horse", "cow", "camel", "sheep", "goat"]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedStringArray")
배열 검색
let defaults = UserDefaults.standard
let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()
배열 내
배열 저장
let array = [15, 33, 36, 723, 77, 4]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedIntArray")
배열 검색
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedIntArray") as? [Int] ?? [Int]()
부울 배열
배열 저장
let array = [true, true, false, true, false]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedBoolArray")
배열 검색
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedBoolArray") as? [Bool] ?? [Bool]()
날짜 배열
배열 저장
let array = [Date(), Date(), Date(), Date()]
let defaults = UserDefaults.standard
defaults.set(array, forKey: "SavedDateArray")
배열 검색
let defaults = UserDefaults.standard
let array = defaults.array(forKey: "SavedDateArray") as? [Date] ?? [Date]()
객체 배열
사용자 지정 개체(그리고 결과적으로 개체 배열)를 저장하는 데 조금 더 많은 작업이 필요합니다.UserDefaults
방법은 다음 링크를 참조하십시오.
메모들
- 영 병합 연산자(
??
)를 사용하면 저장된 배열이나 빈 배열을 충돌 없이 반환할 수 있습니다.즉, 객체가 0을 반환하면 다음 값이 다음과 같습니다.??
연산자가 대신 사용됩니다. - 보다시피 기본 설정은 다음과 같습니다.
Int
,Bool
,그리고.Date
저는 또한 그것을 시험했습니다.Double
제가 알기로는 부동산 목록에 저장할 수 있는 모든 것이 이렇게 작동합니다.
@Zaph가 댓글에서 말하는 것에 추가하기 위해서입니다.
나도 너와 같은 문제를 가지고 있어, 알다시피, 일련의.String
저장되지 않았습니다.Apple이 String 및 NSSString과 같은 유형을 브리지하지만, 나는 일련의 데이터를 저장할 수 없었습니다.[String]
둘 중 어느 쪽도[AnyObject]
.
하지만 일련의[NSString]
저한테는 효과가 있어요.
코드가 그렇게 보일 수 있습니다.
var key = "keySave"
var array1: [NSString] = [NSString]()
array1.append("value 1")
array1.append("value 2")
//save
var defaults = NSUserDefaults.standardUserDefaults()
defaults.setObject(array1, forKey: key)
defaults.synchronize()
//read
if let testArray : AnyObject? = defaults.objectForKey(key) {
var readArray : [NSString] = testArray! as [NSString]
}
사전이 아닌 NSString 배열을 만들었습니다.나는 그것이 사전과 함께 작동하는지 확인하지 않았지만, 아마도 당신은 그것들을 정의해야 할 것입니다.[NSString : NSString]
그것을 작동시키는 것.
편집
당신의 질문과 제목을 다시 읽는 것, 당신이 말하는 것.array of array
제 생각엔 당신이 함께 있는 한NSString
배열이 작동합니다.하지만 제 답변과 무관하다고 생각되면 댓글로 알려주시면 제가 삭제하겠습니다.
다음은 유형의 객체 목록을 읽고 작성하는 예제입니다.SNStock
그을실는하를 NSCoding
우리는 전체 목록에 대한 접근자를 가지고 있습니다.watchlist
그리고 객체를 추가하고 제거하는 두 가지 방법, 즉addStock(stock: SNStock)
그리고.removeStock(stock: SNStock)
.
import Foundation
class DWWatchlistController {
private let kNSUserDefaultsWatchlistKey: String = "dw_watchlist_key"
private let userDefaults: NSUserDefaults
private(set) var watchlist:[SNStock] {
get {
if let watchlistData : AnyObject = userDefaults.objectForKey(kNSUserDefaultsWatchlistKey) {
if let watchlist : AnyObject = NSKeyedUnarchiver.unarchiveObjectWithData(watchlistData as! NSData) {
return watchlist as! [SNStock]
}
}
return []
}
set(watchlist) {
let watchlistData = NSKeyedArchiver.archivedDataWithRootObject(watchlist)
userDefaults.setObject(watchlistData, forKey: kNSUserDefaultsWatchlistKey)
userDefaults.synchronize()
}
}
init() {
userDefaults = NSUserDefaults.standardUserDefaults()
}
func addStock(stock: SNStock) {
var watchlist = self.watchlist
watchlist.append(stock)
self.watchlist = watchlist
}
func removeStock(stock: SNStock) {
var watchlist = self.watchlist
if let index = find(watchlist, stock) {
watchlist.removeAtIndex(index)
self.watchlist = watchlist
}
}
}
개체를 구현해야 합니다. 그렇지 않으면 인코딩이 작동하지 않습니다.이것은 무엇입니까?SNStock
다음과 같은 모양:
import Foundation
class SNStock: NSObject, NSCoding
{
let ticker: NSString
let name: NSString
init(ticker: NSString, name: NSString)
{
self.ticker = ticker
self.name = name
}
//MARK: NSCoding
required init(coder aDecoder: NSCoder) {
self.ticker = aDecoder.decodeObjectForKey("ticker") as! NSString
self.name = aDecoder.decodeObjectForKey("name") as! NSString
}
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(ticker, forKey: "ticker")
aCoder.encodeObject(name, forKey: "name")
}
//MARK: NSObjectProtocol
override func isEqual(object: AnyObject?) -> Bool {
if let object = object as? SNStock {
return self.ticker == object.ticker &&
self.name == object.name
} else {
return false
}
}
override var hash: Int {
return ticker.hashValue
}
}
이것이 도움이 되길 바랍니다!
스위프트 4.0
스토어:
let arrayFruit = ["Apple","Banana","Orange","Grapes","Watermelon"]
//store in user default
UserDefaults.standard.set(arrayFruit, forKey: "arrayFruit")
가져오기:
if let arr = UserDefaults.standard.array(forKey: "arrayFruit") as? [String]{
print(arr)
}
여기:
var array : [String] = ["One", "Two", "Three"]
let userDefault = UserDefaults.standard
// set
userDefault.set(array, forKey: "array")
// retrieve
if let fetchArray = userDefault.array(forKey: "array") as? [String] {
// code
}
이거 먹어봐요.
사용자 기본값에서 데이터를 가져옵니다.
var defaults = NSUserDefaults.standardUserDefaults()
var dict : NSDictionary = ["key":"value"]
var array1: NSArray = dict.allValues // Create a dictionary and assign that to this array
defaults.setObject(array1, forkey : "MyKey")
var myarray : NSArray = defaults.objectForKey("MyKey") as NSArray
println(myarray)
Swift 5+로 작업하는 경우 사용해야 합니다.UserDefaults.standard.setValue(value, forKey: key)
된 데이터를 저된데를얻사합니다용야해면으려장을 사용해야 .UserDefaults.standard.dictionary(forKey: key)
.
언급URL : https://stackoverflow.com/questions/25179668/how-to-save-and-read-array-of-array-in-nsuserdefaults-in-swift
'programing' 카테고리의 다른 글
PHP에서 정적 메서드를 연결하시겠습니까? (0) | 2023.09.05 |
---|---|
Try Catch 블록을 사용해야 하는 경우 (0) | 2023.08.26 |
Swift에서 설정할 배열 축소 (0) | 2023.08.26 |
openpyxl에서 행 값 보기 (0) | 2023.08.26 |
cPanel - MariaDB - 다중 데이터베이스의 업데이트 필드 (0) | 2023.08.26 |