Làm cách nào để xóa giá trị mặc định của người dùng trong NSUserDefaults?


79

Tức là, ứng dụng của tôi đặt một số giá trị mặc định tiêu chuẩn ngay từ đầu. Sau đó, những giá trị đó có thể bị người dùng ghi đè. Và khi người dùng làm mọi thứ rối tung lên, tôi muốn đặt các cài đặt đó trở lại giá trị mặc định cho ứng dụng của mình. Theo tôi hiểu, mặc định của ứng dụng là một từ điển khác với mặc định của người dùng và người dùng mặc định chỉ ghi đè các mặc định của ứng dụng đó. Nhưng tôi chưa thấy các phương pháp xóa mặc định của người dùng. Bất kỳ ý tưởng?

Câu trả lời:



97

Sử dụng mã này

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"MyKey"];

đừng quên đồng bộ hóa nếu bạn muốn lưu ngay lập tức

[[NSUserDefaults standardUserDefaults] synchronize];

Tham chiếu lớp NSUserDefaults

đồng bộ hóa - Phương pháp này được gọi tự động theo các khoảng thời gian định kỳ, chỉ sử dụng phương pháp này nếu bạn không thể đợi đồng bộ hóa tự động (ví dụ: nếu ứng dụng của bạn sắp thoát) hoặc nếu bạn muốn cập nhật người dùng mặc định cho những gì có trên đĩa. mặc dù bạn không thực hiện bất kỳ thay đổi nào.

Swift 5:

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()

2
+1 cho [[NSUserDefaults standardUserDefaults] đồng bộ hóa]; Tôi thường quên thêm điều này.
Augustine

nếu bạn không đồng bộ hóa, nó sẽ tự động đồng bộ hóa khi bạn đóng ứng dụng của mình.
Yucel Bayram

1
@yucelbayram -> yup, nhưng nếu bạn muốn lưu ngay lập tức thì bạn phải syn.
Rajneesh071

1
@ Rajneesh071 vâng đó là sự thật.
Yucel Bayram

Tài liệu của Apple hiện nói về phương pháp đồng bộ hóa: "Chờ 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 là không cần thiết và không nên sử dụng." Bạn không cần phải sử dụng cái này nữa.
anders32

8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];

8

Phiên bản Swift để dán sao chép dễ dàng:

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()

hoặc là

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()

Các tài liệu của Apple nói rằng .synchronize() "không cần thiết và không nên được sử dụng. Developer.apple.com/documentation/foundation/userdefaults/…
James Jordan Taylor

6

Để xóa một giá trị KEY cụ thể:

Swift 3+

UserDefaults.standard.removeObject(forKey: "KEY")

Ob-C

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];

Nếu bạn cần đặt lại UserDefaults / Clear All datas :

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

Swift 3:

if let bundle = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundle)
}

4

Đã cập nhật cho mã Swift 3.0:

UserDefaults.standard.removeObject(forKey: "YOURKEY")


2
Value of type 'UserDefaults' has no member 'remove'
Charlie Fish

1
kbunarjo, Bạn đã thử cái này chưa. CƯỜI LỚN. Swift 3 -UserDefaults.standard.removeObject (forKey: "Key")
Jeff

1
@Jeff họ vừa mới phát hành phiên bản mới hơn của Swift 3 (3.1). Tôi chưa xem qua tài liệu, vì vậy tôi cho rằng đây là lý do tại sao phiên bản của tôi không hoạt động nữa.
kbunarjo

Ya, nghĩ nó thật buồn cười :)
Jeff

1
UserDefaults.standard.removeObject (forKey: "YOURKEY");
Martyn Chamberlin

0

Trong Swift 4

    UserDefaults.standard.removeObject(forKey: "your_key")
    UserDefaults.standard.synchronize()

-1

Cách nhanh chóng

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
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.