2009-08-27 27 views
64

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

Trả lời

88

Sử dụng mã này

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

không quên để đồng bộ hóa nếu bạn muốn tiết kiệm ngay lập tức

[[NSUserDefaults standardUserDefaults] synchronize]; 

NSUserDefaults Class Reference

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

+2

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

+0

@Augustine:) cảm ơn u :) – Rajneesh071

+0

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. –

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

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

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

hoặc

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

Tài liệu Apple tuyên bố rằng '.synchronize()' "là không cần thiết và không nên sử dụng. Https://developer.apple.com/documentation/foundation/userdefaults/1414005-synchronize –

4

Cập nhật cho Swift đang 3.0:

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

+2

' Giá trị kiểu 'UserDefaults' có không có thành viên 'remove'' –

+1

kbunarjo, Bạn thậm chí còn thử điều này LOL. Swift 3 -UserDefaults.standard.removeObject (forKey: "Key") – Jeff

+1

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

4

Để loại bỏ một KEY cụ thể v alue:

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

Nếu bạn cần phải thiết lập lại UserDefaults/Xóa tất cả dữ liệu ngay:

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

Swift 3:

if let bundle = Bundle.main.bundleIdentifier { 
    UserDefaults.standard.removePersistentDomain(forName: bundle) 
} 
Các vấn đề liên quan