ios - 如何快速访问 NSObject 中的元素?

标签 ios swift swift2 local-storage nsobject

我已经将一些变量设置为对象

import UIKit
class SpeedTestResult: NSObject {
    var testTime: NSDate?
}

然后在 Controller 中我设置这个对象并将它传递给一个类来存储它:

testResult.testTime = NSDate()
SpeedTestManager().addTestResult(testResult)

我需要存储这个对象,然后在 View 中访问其中的元素,这就是我所拥有的:

import Foundation
class SpeedTestManager : NSObject {
    var testResultArray = [NSObject]()
    func addTestResult(testResult: NSObject) {
        testResultArray.append(testResult)
        print("Printing testResultArray: \(testResultArray)")

    }
}

但是当我尝试打印我得到的对象时

Printing testResultArray: [<ProjectName.SpeedTestResult: 0x127b85e50>]

我如何访问对象中的元素并存储此对象并检索它以供以后在 View 中使用?

最佳答案

class TestResult : NSObject, NSSecureCoding {
    var testTime: NSDate?

    override init() {
        super.init()
    }

    @objc required init?(coder decoder: NSCoder) {
        self.testTime = decoder.decodeObjectForKey("testTime") as? NSDate
    }

    @objc func encodeWithCoder(encoder: NSCoder) {
        encoder.encodeObject(self.testTime, forKey: "testTime")
    }

    @objc static func supportsSecureCoding() -> Bool {
        return true
    }

    override var description: String {
        return String.init(format: "TestResult: %@", self.testTime ?? "null")
    }
}

class SpeedTestManager : NSObject, NSSecureCoding {
    var testResultArray = [NSObject]()

    func addTestResult(testResult: NSObject) {
        testResultArray.append(testResult)
        print("Printing testResultArray: \(testResultArray)")
    }

    override init() {
        super.init()
    }

    @objc func encodeWithCoder(encoder: NSCoder) {
        encoder.encodeObject(self.testResultArray, forKey: "testResultArray")
    }

    @objc required init?(coder decoder: NSCoder) {
        self.testResultArray = decoder.decodeObjectForKey("testResultArray") as! [NSObject]
    }

    @objc static func supportsSecureCoding() -> Bool {
        return true
    }

    override var description: String {
        return String.init(format: "SpeedManager: [%@]", self.testResultArray.map({"\($0)"}).joinWithSeparator(","))
    }
}

class TestViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()


        let testResult = TestResult()
            testResult.testTime = NSDate()

        let speedManager = SpeedTestManager()
            speedManager.addTestResult(testResult)

        NSUserDefaults.standardUserDefaults().setObject(NSKeyedArchiver.archivedDataWithRootObject(speedManager), forKey: "speedManager")
        NSUserDefaults.standardUserDefaults().synchronize()

        if let archivedSpeedManager = NSUserDefaults.standardUserDefaults().objectForKey("speedManager") as? NSData {
            let unarchivedSpeedManager = NSKeyedUnarchiver.unarchiveObjectWithData(archivedSpeedManager)
            print("SpeedManager: \(unarchivedSpeedManager ?? "null")")
        }
        else {
            print("Failed to unarchive speed manager")
        }
    }
}

关于ios - 如何快速访问 NSObject 中的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37580837/

相关文章:

regex - 检查字符串内的值

Swift 2迁移错误: "Type of expression is ambiguous without more context "

ios - 如果我不将对象分配给自己,则 pushViewController 不会运行

ios - 在哪里可以找到有关 swift alert (UIAlertController) 的明确解释?

ios - Sprite Kit - 无法从对象获取自定义类数据

xcode - 将 myApp 加载到越狱的 iPod Touch 4G 中

xcode - 使用 GameScene 作为参数将其传递给不同的类 - Swift2

ios - Codables 错误与 Alamofire "Cannot convert value of type ' [字符串 : Any ]' to expected argument type ' Data'"

ios - HKWorkoutActivityType 详细文档?

ios - 如何在一个 View Controller 中拥有多个 Collection View ?