Android साझा वरीयताएँ के लिए iOS समकक्ष


105

मैं आईओएस के लिए एक एंड्रॉइड ऐप को पोर्ट कर रहा हूं, एक चीज जो मैंने उपयोग की थी वह एंड्रॉइड में शेयर्ड प्राथमिकताएं थी जो हर बार एक स्तर पूरा होने से बचाने के लिए थी।

इस तरह जब उपयोगकर्ता ऐप में वापस जाता है, तो वे देख सकते हैं कि वे स्तर 3 या जो भी हो।

क्या आईओएस में एक समान तंत्र है? या क्या मुझे किसी एप्लिकेशन विशिष्ट फ़ाइल को मैन्युअल रूप से लिखना है?

यदि हां, तो मैं केवल अपने आवेदन पर दिखाई देने वाली फ़ाइलों को कैसे लिखूं?

धन्यवाद।


1
मुझे लगता है कि iOS में इसका सबसे करीबी चीज NSUserDefaults है । और यहाँ एक सरल उदाहरण है कि कैसे सहेजना और पुनः प्राप्त करना है।
तारेक हल्क

जवाबों:


203

NSUserDefaults का उपयोग करें : - ध्यान दें कि यह डेटा के छोटे बिट्स के लिए है, जैसे कि आपके द्वारा बताया गया वर्तमान स्तर। इसका दुरुपयोग न करें और इसे एक बड़े डेटाबेस के रूप में उपयोग करें, क्योंकि यह आपके ऐप को खोलने पर हर बार मेमोरी में लोड होता है, चाहे आपको इसमें से कुछ की आवश्यकता हो या नहीं (आपके ऐप के अन्य हिस्से भी इसका उपयोग करेंगे)।

उद्देश्य सी:

पढ़ना:

NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];

NSString *currentLevelKey = @"currentlevel";

if ([preferences objectForKey:currentLevelKey] == nil)
{
    //  Doesn't exist.
}
else
{
    //  Get current level
    const NSInteger currentLevel = [preferences integerForKey:currentLevelKey];
}

लिख रहे हैं:

NSUserDefaults *preferences = [NSUserDefaults standardUserDefaults];

NSString *currentLevelKey = @"currentlevel";

const NSInteger currentLevel = ...;
[preferences setInteger:currentLevel forKey:currentLevelKey];

//  Save to disk
const BOOL didSave = [preferences synchronize];

if (!didSave)
{
    //  Couldn't save (I've never seen this happen in real world testing)
}

स्विफ्ट:

पढ़ना:

let preferences = NSUserDefaults.standardUserDefaults()

let currentLevelKey = "currentLevel"

if preferences.objectForKey(currentLevelKey) == nil {
    //  Doesn't exist
} else {
    let currentLevel = preferences.integerForKey(currentLevelKey)
}

लिख रहे हैं:

let preferences = NSUserDefaults.standardUserDefaults()

let currentLevelKey = "currentLevel"

let currentLevel = ...
preferences.setInteger(currentLevel, forKey: currentLevelKey)

//  Save to disk
let didSave = preferences.synchronize()

if !didSave {
    //  Couldn't save (I've never seen this happen in real world testing)
}

आप स्विफ्ट if let savedLevel = preferences.integerForKey(currentLevelKey) { करंट में पढ़ने के लिए सशर्त बाइंडिंग का भी उपयोग कर सकते हैं। SaveLevel}
रघु तेजा

4
@chitti nope that wont work, integerForKey एक वैकल्पिक नहीं लौटाता है
SomeGuy

40

यहां स्विफ्ट 3 के लिए अपडेट दिया गया है

पढ़ना

let preferences = UserDefaults.standard

let currentLevelKey = "currentLevel"
if preferences.object(forKey: currentLevelKey) == nil {
    //  Doesn't exist
} else {
    let currentLevel = preferences.integer(forKey: currentLevelKey)
}

लिख रहे हैं

let preferences = UserDefaults.standard

let currentLevel = ...
let currentLevelKey = "currentLevel"
preferences.set(currentLevel, forKey: currentLevelKey)

अपडेट करें

से UserDefaults प्रलेखन

synchronize()चूक डेटाबेस और रिटर्न के लिए किसी भी लंबित अतुल्यकालिक अद्यतन की प्रतीक्षा करता है; यह विधि अब अनावश्यक है और इसका उपयोग नहीं किया जाना चाहिए।


2
class Configuration {

    static func value<T>(defaultValue: T, forKey key: String) -> T{

        let preferences = UserDefaults.standard
        return preferences.object(forKey: key) == nil ? defaultValue : preferences.object(forKey: key) as! T
    }

    static func value(value: Any, forKey key: String){

        UserDefaults.standard.set(value, forKey: key)
    }

}

उदाहरण

//set
Configuration.value(value: "my_value", forKey: "key_1")

//get
let myValue = Configuration.value(defaultValue: "default_value", forKey: "key_1")

-1

पिछले उत्तर के अनुसार, आप पहले से ही जानते हैं कि UserDefaultsआयोस में साझा प्राथमिकताओं के बराबर है। आप एक सामान्य लेखन फ़ंक्शन बना सकते हैं और डेटा प्रकार के आधार पर फ़ंक्शन बना सकते हैं। और अपने आवश्यक विधि को कहीं से भी कॉल करें।

ViewController.swift

 // write data
 writeAnyData(key: "MY_KEY", value: "MyData")
 // read string data 
 readStringData(key: "MY_KEY"), animated: true)

Utils.swift

// read and write user default
let userDefault = UserDefaults.standard
// write
func writeAnyData(key: String, value: Any){
    userDefault.set(value, forKey: key)
    userDefault.synchronize()
}

// read int values
func readIntData(key: String) -> Int{
    if userDefault.object(forKey: key) == nil {
        return 0
    } else {
        return userDefault.integer(forKey: key)
    }
}

// read string values
func readStringData(key: String) -> String{
    if userDefault.object(forKey: key) == nil {
        return ""
    } else {
        return userDefault.string(forKey: key)!
    }
}
// read bool value
func readBoolData(key: String) -> Bool{
    if userDefault.object(forKey: key) == nil {
        return false
    } else {
        return userDefault.bool(forKey: key)
    }
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.