iOS tương đương cho tùy chọn chia sẻ Android


105

Tôi đang chuyển một ứng dụng Android sang iOS, một thứ tôi đã sử dụng là Tùy chọn chia sẻ trong Android để lưu mỗi khi hoàn thành một cấp độ.

Bằng cách đó, khi người dùng quay lại ứng dụng, họ có thể thấy họ đã lên cấp 3 hoặc bất cứ thứ gì.

Có cơ chế tương tự trong iOS không? hay tôi phải ghi thủ công vào một tệp ứng dụng cụ thể?

Nếu vậy, làm cách nào để ghi ra các tệp chỉ hiển thị cho ứng dụng của tôi?

Cảm ơn.


1
Tôi đoán thứ gần nhất với điều này trong iOS là NSUserDefaults . Và đây là một ví dụ đơn giản về cách lưu và truy xuất.
Tarek Hallak

Câu trả lời:


203

Sử dụng NSUserDefaults : - lưu ý rằng điều này dành cho các bit dữ liệu nhỏ, chẳng hạn như mức hiện tại như bạn đã đề cập. Đừng lạm dụng điều này và sử dụng nó như một cơ sở dữ liệu lớn, vì nó được tải vào bộ nhớ mỗi khi bạn mở ứng dụng của mình, cho dù bạn có cần thứ gì đó từ nó hay không (các phần khác của ứng dụng của bạn cũng sẽ sử dụng điều này).

Mục tiêu-C:

Đọc hiểu:

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];
}

Viết:

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)
}

.

Nhanh:

Đọc hiểu:

let preferences = NSUserDefaults.standardUserDefaults()

let currentLevelKey = "currentLevel"

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

Viết:

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)
}

Bạn cũng có thể sử dụng ràng buộc có điều kiện để đọc trong nhanh hiện if let savedLevel = preferences.integerForKey(currentLevelKey) { tạiLevel = saveLevel}
Raghu Teja

4
@chitti nope rằng công việc sẽ không, integerForKey không trả lại một tùy chọn
SomeGuy

40

Đây là bản cập nhật cho Swift 3

đọc hiểu

let preferences = UserDefaults.standard

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

Viết

let preferences = UserDefaults.standard

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

Cập nhật

Từ tài liệu UserDefaults

synchronize()đợi mọi bản cập nhật không đồng bộ đang chờ xử lý cho cơ sở dữ liệu mặc định và trả về; phương pháp này hiện không cần thiết và không nên sử dụng.


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)
    }

}

Thí dụ

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

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

-1

Như câu trả lời trước, bạn đã biết điều đó UserDefaultstương đương với các tùy chọn được chia sẻ trong ios. Bạn có thể tạo một hàm ghi chung và cho hàm tạo đọc dựa trên kiểu dữ liệu. Và gọi phương thức yêu cầu của bạn từ bất cứ đâu.

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)
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.