swift - UserDefaults 保存字符串 -> 尝试将非属性列表对象(函数)设置为 NSUserDefaults/CFPreferences

标签 swift nsuserdefaults nstimeinterval

我在检索 UserDefaults 时收到上面的错误消息。我将该值保存为字符串。 TimeInterval 转换为字符串。 哪里有问题?

保存字符串的代码:

let timeResponse:TimeInterval = NSDate.timeIntervalSinceReferenceDate - start

let JSONTransferTime = TimeInterval.toReadableString(timeResponse) //converting to String

UserDefaults.standard.set(JSONTransferTime, forKey:"JSONTranferTime")

获取字符串的代码:

let JSONTransferTime: String = UserDefaults.standard.string(forKey: "JSONTranferTime")! as String

Utils.displayAlert(title: "JSON download time", message: JSONTransferTime)

确切的错误信息:

[User Defaults] Attempt to set a non-property-list object (Function) as an NSUserDefaults/CFPreferences value for key JSONTranferTime

toReadableString 的代码:

extension TimeInterval {

func toReadableString() -> String {

    // Nanoseconds
    let ns = Int((self.truncatingRemainder(dividingBy: 1)) * 1000000000) % 1000
    // Microseconds
    let us = Int((self.truncatingRemainder(dividingBy: 1)) * 1000000) % 1000
    // Milliseconds
    let ms = Int((self.truncatingRemainder(dividingBy: 1)) * 1000)
    // Seconds
    let s = Int(self) % 60
    // Minutes
    let mn = (Int(self) / 60) % 60
    // Hours
    let hr = (Int(self) / 3600)

    var readableStr = ""
    if hr != 0 {
        readableStr += String(format: "%0.2dhr ", hr)
    }
    if mn != 0 {
        readableStr += String(format: "%0.2dmn ", mn)
    }
    if s != 0 {
        readableStr += String(format: "%0.2ds ", s)
    }
    if ms != 0 {
        readableStr += String(format: "%0.3dms ", ms)
    }
    if us != 0 {
        readableStr += String(format: "%0.3dus ", us)
    }
    if ns != 0 {
        readableStr += String(format: "%0.3dns", ns)
    }

    return readableStr
}

JSONTransferTime 变量已填充:

Alert to show downloadtime

最佳答案

toReadableString() 是一个实例 方法,您必须在 timeResponse 上调用它,而不是在返回编译器函数的类型上调用它顺便提示一下。

let jsonTransferTime = timeResponse.toReadableString()

请遵守变量名以小写字母开头的命名约定,不要注释编译器可以推断的类型。

关于swift - UserDefaults 保存字符串 -> 尝试将非属性列表对象(函数)设置为 NSUserDefaults/CFPreferences,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54942308/

相关文章:

ios - 如何将NSString hexInterval转成NSTimeInterval进行日期转换

ios - 如何左右滑动uitableview中的单元格,在左侧显示图像,在右侧显示图像

ios - 使用 Jenkins 构建 Xcode 8 时出现问题

iphone - 如何在 NSURLRequest 中使用身份验证 token

iphone - ExternalAccessory 和 NSUserDefaults 奇怪的问题

ios - 如何在 Swift 中使用 Timer(以前称为 NSTimer)?

cocoa - 在 NSUserDefaults 中存储 NSDate 的最佳方式是什么?

ios - 为什么核心显卡线条不对齐?

ios - 从 AnyObject(NSString) 获取字符串

iphone - 将 NSUserDefaults 转换为钥匙串(keychain)?