2010-08-10 4 views
-1

NSUserDefaults가 plist 파일에서 키와 값을 읽을 수 있음을 알고 있습니다. 키 구조를 읽을 수 있습니까? 예를 들어plist 파일의 구조를 읽을 수 있습니까?

:

키 '백작'의 정수이며, 값 '백작'

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 

if([defaults objectForKey:@"Count"]!=nil) 
{ 

    NSString *s=[[NSString alloc] initWithString: [defaults objectForKey:@"Count"]]; 
    NSInteger v=[s intValue]; 
    [s release]; 
} 
를 얻을 수 있습니다 1,2,3,4,5

코드 아래 옵션이

하지만 NSArray 또는 더 나은 저장소 구조에 모든 옵션과 저장소를 가져 오는 것이 좋습니다.

가능합니까?

+1

앱의 Settings.bundle에서 PSMultiValueSpecifier 설정에 사용할 수있는 값을 읽고 싶습니까? – Vladimir

답변

1

나는 번들 설정을 다음과 같이 읽어

// Get path to Root.plist file in settings bundle and retrieving its contents 
NSString* tPath = [[NSBundle mainBundle] pathForResource:@"Settings" ofType:@"bundle"]; 
settingsBundle = [[NSBundle bundleWithPath:tPath] retain]; 
NSDictionary* tSetDict = [NSDictionary dictionaryWithContentsOfFile:[tPath stringByAppendingPathComponent:@"Root.plist"]]; 

// Get array of preference dictionaries 
NSArray* prefs = [tSetDict objectForKey:@"PreferenceSpecifiers"]; 

// Iterate through dictionaries to find required value 
for (NSDictionary* setDict in prefs){ 
    NSString* type = [setDict objectForKey:@"Type"]; 
    if (![type isEqualToString:@"PSMultiValueSpecifier"]){ 
     // Get possible preference values for PSMultiValueSpecifier case 
     // You may need to know value type in advance - not sure about that 
     NSArray* values = [setDict objectForKey:@"Values"]; 
    } 
} 
1

내가 당신의 질문을 이해 정확히 모르겠어요을하지만 당신은 직접 사용자 디폴트 시스템이 정의 된 방법을 통해 저장에 액세스 할 수 없습니다. 하나의 큰 덩어리로 그들을 읽을 수는 없습니다.

기본값 시스템은 실제로 plist 파일을 읽는 수단이 아니며, OS 자체에서 유지 관리하는 데이터베이스에 액세스하기위한 API입니다. iPhone에서 많이 볼 수는 없지만 실제로는 개별 앱뿐만 아니라 사용자, 그룹, 사용자, 컴퓨터 및 네트워크에 대한 환경 설정을 관리하는 매우 크고 복잡한 시스템입니다. iOS에서는 사소한 것처럼 보입니다. MacOS에서 적절하게 사용하고 구성 할 수있는 유연성이 없기 때문입니다.

전체 기본값을 읽을 수 없을 것입니다. 왜냐하면 iOS에서도 기대할 수있는 것보다 훨씬 크고 크기가 크기 때문입니다.

답변에 표시된 코드에서 농구대를 뛰어 넘지 않고 저장된 데이터 유형에 대한 전용 방법 중 하나를 사용하여 키의 데이터에 액세스해야합니다. 이 경우 :

NSUserDefaults *defaults=[NSUserDefaults standardUserDefaults]; 
NSInteger v=[defaults integerForKey:@"Count"]; 

하나 개 체크 아웃 기본값을 읽어 않았더라도, 당신은 당신이 사용에서와 같은 다른 데이터 구조의 데이터에 액세스하기 위해 전화와 동일한 코드 유형을 사용하여 자신을 발견 할 것이다 처음에는 기본값입니다. 디폴트 시스템을 사용할 수도 있습니다.

관련 문제