วิธีรับค่า / คีย์ที่เลือกจาก PSMultiValueSpecifier

ใน Settings.bundle ของฉัน ฉันได้กำหนด PSMultiValueSpecifier แล้ว ตอนนี้ฉันต้องการอ่านค่า ที่เลือก

นี่คือวิธีที่ฉันอ่านข้อความธรรมดาจากช่องข้อความ Settings.bundle

[[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];

มีความคิดวิธีการอ่านค่าหลายค่าที่เลือกอย่างไร


person Upvote    schedule 08.04.2011    source แหล่งที่มา
comment
คุณหมายถึงว่าคุณต้องการดึงข้อมูลอาร์เรย์หรือ dic หรือไม่?   -  person Ahmad Kayyali    schedule 08.04.2011
comment
ฉันต้องการวิธีรับชื่อปัจจุบันและค่าคีย์ของฟิลด์ที่เลือก   -  person Upvote    schedule 09.04.2011


คำตอบ (3)


การใช้ Key ที่คุณระบุไว้สำหรับฟิลด์นี้ใน Settings.plist ของคุณ คุณจะได้รับค่าที่เลือกด้วย:

// Assumption: myKey is a string that's equal to the Key in Settings.plist
[[NSUserDefaults standardUserDefaults] objectForKey:myKey];

ไม่มีวิธีรับชื่อเรื่องของฟิลด์ที่เลือกผ่านค่าเริ่มต้นของผู้ใช้ คุณจะต้องอ่านใน Settings.plist โดยตรง หรือจัดเก็บชื่อและค่าที่มาด้วยกันไว้ใน Plist ที่สองในชุดแอปของคุณเพื่อให้เข้าถึงได้ง่าย

person Ole Begemann    schedule 11.04.2011

ใช้สิ่งนี้เพื่อรับคุณค่าของคุณ:

NSString* value = [[NSUserDefaults standardUserDefaults] stringForKey:@"key"] 

คีย์คือชื่อของการตั้งค่าที่คุณต้องการรับค่า จากนั้นคุณสามารถรับค่าทศนิยมหรือค่า int ของสตริงได้หากต้องการ

person quaertym    schedule 11.04.2011
comment
นั่นคือสิ่งที่เขาทำในคำถามเดิม - person sergey.syrotynin; 10.05.2019

โปรดตรวจสอบคำถาม

รหัส [[NSUserDefaults standardUserDefaults] stringForKey:@"key"] ส่งคืน nil จนกว่าข้อมูลจะถูกบันทึกไปที่ UserDefaults หรือผู้ใช้เลือกตัวเลือกด้วยตนเองในการตั้งค่า

ฉันขอแนะนำให้บันทึกค่าเริ่มต้นตามที่เลือกไว้เมื่อเปิดแอป:

static func registerSettingsDefaults()
{
    // Get Settings bundle path
    guard let settingsBundle = Bundle.main.path(forResource: "Settings", ofType: "bundle") else {
        assertionFailure("Could not find Settings bundle")
        return
    }

    // Get settings plist
    let settings = NSDictionary(contentsOfFile: settingsBundle + "/Root.plist")

    // Get preferences dictionary
    guard let preferences = settings?.object(forKey: "PreferenceSpecifiers") as? [[String: Any]] else {
        assertionFailure("Could not find preferences")
        return
    }

    // Filter out default values from Settings
    var defaultsToRegister: [String: Any] = [:]
    preferences.forEach { dictionary in
        if let key = dictionary["Key"] as? String {
            defaultsToRegister[key] = dictionary["DefaultValue"] as? String
        }
    }

    UserDefaults.standard.register(defaults: defaultsToRegister)
}
person sergey.syrotynin    schedule 10.05.2019