第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

如何在NSUserdefaults中快速保存和讀取數(shù)組的數(shù)組?

如何在NSUserdefaults中快速保存和讀取數(shù)組的數(shù)組?

揚(yáng)帆大魚 2019-11-27 10:38:19
我需要?jiǎng)?chuàng)建一個(gè)數(shù)組來添加具有這種格式的對(duì)象,例如Swift中的字典:[“ key1”:“ value1”,“ key2”:“ value2”]當(dāng)我嘗試NSUserDefaults全部保存時(shí)是正確的,但是NSUserDefaults使用鍵讀取時(shí)會(huì)崩潰。var obj需要什么類型的數(shù)據(jù)?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"])//savevar savestring : [AnyObject!]savestring = array1var defaults = NSUserDefaults.standardUserDefaults()defaults.setObject(savestring, forKey: key)defaults.synchronize()//readvar obj: [AnyObject!] = []if(obj != nil){    print("size: ")    print(obj.count) //vary long value confused..    element = obj[0]  //crash    print(element.objectForKey("key1"))}
查看完整描述

3 回答

?
莫回?zé)o

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊

這個(gè)問題的意思是“數(shù)組數(shù)組”,但我認(rèn)為大多數(shù)人可能只是想知道如何將數(shù)組保存到UserDefaults。對(duì)于那些人,我將添加一些常見示例。


字符串?dāng)?shù)組

保存數(shù)組


let array = ["horse", "cow", "camel", "sheep", "goat"]


let defaults = UserDefaults.standard

defaults.set(array, forKey: "SavedStringArray")

檢索數(shù)組


let defaults = UserDefaults.standard

let myarray = defaults.stringArray(forKey: "SavedStringArray") ?? [String]()

整數(shù)數(shù)組

保存數(shù)組


let array = [15, 33, 36, 723, 77, 4]


let defaults = UserDefaults.standard

defaults.set(array, forKey: "SavedIntArray")

檢索數(shù)組


let defaults = UserDefaults.standard

let array = defaults.array(forKey: "SavedIntArray")  as? [Int] ?? [Int]()

布爾數(shù)組

保存數(shù)組


let array = [true, true, false, true, false]


let defaults = UserDefaults.standard

defaults.set(array, forKey: "SavedBoolArray")

檢索數(shù)組


let defaults = UserDefaults.standard

let array = defaults.array(forKey: "SavedBoolArray")  as? [Bool] ?? [Bool]()

日期數(shù)組

保存數(shù)組


let array = [Date(), Date(), Date(), Date()]


let defaults = UserDefaults.standard

defaults.set(array, forKey: "SavedDateArray")

檢索數(shù)組


let defaults = UserDefaults.standard

let array = defaults.array(forKey: "SavedDateArray")  as? [Date] ?? [Date]()

對(duì)象數(shù)組

自定義對(duì)象(以及對(duì)象的數(shù)組)需要做更多的工作才能保存到UserDefaults。請(qǐng)參閱以下鏈接以了解操作方法。


將自定義對(duì)象保存到NSUserDefaults中

用于將顏色保存為UserDefaults的文檔

嘗試將非屬性列表對(duì)象設(shè)置為NSUserDefaults

筆記

使用nil合并運(yùn)算符(??),您可以返回保存的數(shù)組或空數(shù)組而不會(huì)崩潰。這意味著如果對(duì)象返回nil,則將??使用運(yùn)算符后的值代替。

正如你所看到的,基本設(shè)置是為同一個(gè)Int,Bool和Date。我也用進(jìn)行了測試Double。據(jù)我所知,您可以保存在屬性列表中的所有內(nèi)容都將像這樣工作。


查看完整回答
反對(duì) 回復(fù) 2019-11-27
?
月關(guān)寶盒

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊

只是添加到@Zaph在評(píng)論中所說的內(nèi)容。


我知道您遇到的問題與您相同,String無法保存的數(shù)組。即使Apple橋接了String和NSString之類的類型,我也無法保存[String]兩個(gè)都不包含的數(shù)組[AnyObject]。


但是[NSString]為我準(zhǔn)備了一系列作品。


因此您的代碼可能如下所示:


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]

}

請(qǐng)注意,我創(chuàng)建了一個(gè)NSString數(shù)組,而不是一個(gè)字典。我沒有檢查它是否適用于字典,但是可能您必須定義一些東西[NSString : NSString]才能使其工作。


編輯


重新閱讀您的問題和標(biāo)題,您正在談?wù)揳rray of array。我認(rèn)為,只要您繼續(xù)使用NSString,數(shù)組數(shù)組就可以工作。但是,如果您認(rèn)為我的答案無關(guān)緊要,請(qǐng)?jiān)谠u(píng)論中讓我知道,然后我將其刪除。


查看完整回答
反對(duì) 回復(fù) 2019-11-27
?
RISEBY

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊

這是一個(gè)讀寫SNStock實(shí)現(xiàn)類型的對(duì)象列表的示例NSCoding-我們有一個(gè)用于整個(gè)列表的訪問器watchlist,以及兩個(gè)添加和刪除對(duì)象的方法,即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

    }

  }


}

請(qǐng)記住,您的對(duì)象需要實(shí)現(xiàn)NSCoding,否則編碼將無法正常工作。這里是什么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

  }

}

希望這可以幫助!


查看完整回答
反對(duì) 回復(fù) 2019-11-27
  • 3 回答
  • 0 關(guān)注
  • 1050 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)