2012-02-09 18 views

Trả lời

53

Không có cách nào để kiểm tra xem một đối tượng trong NSUserDefaults có trống hay không. Tuy nhiên, bạn có thể kiểm tra xem một giá trị cho khóa cụ thể có phải là không.

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 

NSObject * object = [prefs objectForKey:@"your_particular_key"]; 
if(object != nil){ 
    //object is there 
} 
+0

Cảm ơn nó hoạt động –

+0

Giải pháp tuyệt vời ... :) – Adi

1
NSUserDefaults *data = [NSUserDefaults standardUserDefaults]; 
NSString *string = [data objectForKey:@"yourKey"]; 
if(string==nil) 
NSlog(@"nil") 

Hãy xem NSUserDefault documentation

// For saving the values 
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; 
// saving an NSString 
[userDefaults setObject:@"Ttest" forKey:@"key"]; 
// --- For Retrieving 

NSUserDefaults * userDefaults = [NSUserDefaults standardUserDefaults]; 
// getting an NSString 
NSString *myString = [userDefaults stringForKey:@"key"]; 
+0

Bạn nên so sánh với số không, không NULL, như trạng thái @Krishnabhadra. –

+0

@PhilippeSabourin cảm ơn bạn. NULL là một void *, nil là một id. –

0

Để kiểm tra xem một giá trị cụ thể được thiết lập hay không, bất kể vị trí của nó (toàn cầu hoặc ứng dụng của), kiểm tra giá trị trả về của -[NSUserDefaults objectForKey:]

id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"My-Key-Name"]; 
if (obj != nil) {...} 

Để kiểm tra xem ứng dụng (gói) có bất kỳ cài đặt nào được lưu trữ trong cài đặt mặc định của người dùng hay không :

NSUserDefaults* sdu = [NSUserDefaults standardUserDefaults]; 

NSString* bundleId = [[NSBundle mainBundle] bundleIdentifier]; 
NSDictionary* mainBundleSettings = [sdu persistentDomainForName:bundleId]; 

NSLog(@"%@", mainBundleSettings); 

Nếu bạn quan tâm đến tất cả các giá trị có thể mà -[NSUserDefaults objectForKey:] sẽ trở lại một cái gì đó, bao gồm các thiết lập hệ thống toàn cầu, chỉ cần gọi

NSDictionary* allPossibleSettings = [sdu dictionaryRepresentation]; 

NSUserDefaults là không bao giờ trống rỗng. Nó kết hợp cài đặt chung, cài đặt của gói, dữ liệu tạm thời và có thể là một thứ khác. Ví dụ, nếu bạn gọi:

[[NSUserDefaults standardUserDefaults] objectForKey:@"NSBoldSystemFont"] 

bạn sẽ nhận được giá trị chuỗi @"LucidaGrande-Bold" đó sẽ được lấy từ các thiết lập toàn cầu, ngay cả khi ứng dụng của bạn chưa bao giờ đặt giá trị này.

Các vấn đề liên quan