2011-12-12 36 views
40

Tôi muốn đặt một số giá trị ban đầu cho các khóa NSUserDefault của mình để lần chạy đầu tiên của ứng dụng có một số cài đặt ban đầu hợp lý. Tôi nghĩ rằng tôi chạy qua một cách đơn giản để làm điều này trong gói ứng dụng .plist, nhưng bây giờ tôi không thể tìm thấy nó. Ý tưởng nào?Cách đặt giá trị ban đầu cho Khóa NSUserDefault?

+0

Kiểm tra này: http://jayprakashdubey.blogspot.in/2014/07/nsuserdefault -usage.html –

Trả lời

68

Bạn nên sử dụng phương pháp registerDefaults của NSUserDefaults. Chuẩn bị một tệp plist trong gói của bạn có chứa các tùy chọn mặc định và sau đó sử dụng plist đó để đăng ký các giá trị mặc định.

NSString *defaultPrefsFile = [[NSBundle mainBundle] pathForResource:@"defaultPrefs" ofType:@"plist"]; 
NSDictionary *defaultPreferences = [NSDictionary dictionaryWithContentsOfFile:defaultPrefsFile]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultPreferences]; 

Bạn phải thực thi mã này khi khởi chạy ứng dụng của mình. Nó sẽ thêm các giá trị này vào một tên miền riêng biệt trong hệ thống phân cấp mặc định của người dùng. Bất cứ khi nào giá trị mặc định của người dùng của ứng dụng không cung cấp giá trị cho một khóa nhất định, NSUserDefaults sẽ quay lại miền này và truy lục giá trị từ đó.

+0

Dường như điều này đăng ký mặc định cho một vị trí bộ nhớ dễ bay hơi. Tôi không muốn nó trở lại mặc định rất thường xuyên. Đây là chủ yếu cho lần ra mắt đầu tiên. Các giá trị do người dùng đặt có được giữ nguyên hay đôi khi chúng sẽ bị ghi đè bởi điều này? – Suz

+4

Bạn có ý nghĩa gì bởi "vị trí bộ nhớ dễ bay hơi"? Bạn phải thực thi mã này trên mỗi lần khởi chạy ứng dụng của mình. Nó sẽ thêm các giá trị này vào một tên miền riêng biệt trong hệ thống phân cấp mặc định của người dùng. Bất cứ khi nào giá trị mặc định của người dùng của ứng dụng không cung cấp giá trị cho một khóa nhất định, 'NSUserDefaults' sẽ quay trở lại miền này và truy lục giá trị từ đó. –

+0

Hướng dẫn lập trình mặc định người dùng liệt kê NSRegistrationDomain là có trạng thái 'dễ bay hơi', trái ngược với 'liên tục'. Vì vậy, bản thân các thiết lập mặc định của người dùng là liên tục và các giá trị mặc định là dễ bay hơi, và phải được tải lại trên mỗi lần khởi chạy ứng dụng. Nó chỉ có vẻ kỳ quặc với tôi rằng giá trị 'giảm trở lại' ít bền vững hơn so với cài đặt người dùng. – Suz

0
if ([[[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] containsObject:@"initialValuesHaveBeenWritten"]) 
{ 
    [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:key1]; 
    [[NSUserDefaults standardUserDefaults] setValue:obj2 forKey:key2]; 


    [[NSUserDefaults standardUserDefaults] setValue:obj1 forKey:@"initialValuesHaveBeenWritten"]; 

    [[NSUserDefaults standardUserDefaults] synchronize]; 
} 

NB: Không kiểm tra, thực hiện từ bộ nhớ

+1

Đây thực sự không phải là cách chính xác. Công trình, nhưng nó không phải là những gì Apple gợi ý. Sử dụng -registerDefaults như được mô tả trong câu trả lời bởi @ole hoặc thêm trực tiếp vào miền NSRegistrationDomain. –

+0

Tôi đồng ý. Tôi không biết về registerDefaults khi tôi đã viết câu trả lời này nhưng tôi sử dụng nó ngay bây giờ. –

5

Nếu bạn có nhiều giá trị mặc định, chúng ta hãy sử dụng ola's answer, nếu điều này là tốt cho một vài params

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 

if (![defaults boolForKey:USERDEFAULT_IS_INITIALIZED]) { 
    [defaults setBool:YES forKey:USERDEFAULT_IS_INITIALIZED]; 

    // Set initial values 
    ... 

    [defaults synchronize]; 
} 
-1
-(void) loadDef 
{ 
    NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 

    _removeAd=[userDefaults boolForKey:SAVE_AD_STATUS]; 

    NSString* strDefSetting=[userDefaults stringForKey:SAVE_STATUS_ADSETTING]; 
    if(strDefSetting==nil 
     ||[strDefSetting isEqualToString:@""] 
     ) 
    { 
     [email protected]"0.5"; 
    } 

    _floatAdmob=strDefSetting.floatValue;//0.5; 
} 
Các vấn đề liên quan