2012-03-16 3 views
0

내 소스 코드에서 미리 정의 된 값으로 배열을 초기화 할 수 있어야합니다.이 값은 아래와 같습니다. 그러나 각 배열은 수천 개의 값을 가질 것입니다.많은 수의 값과 배열 및 사전 초기화

tokens = [[NSDictionary alloc] initWithObjectsAndKeys: 
    #import "keyvaluepairs1.h" 
    #import "keyvaluepairs2.h" 
    , nil]; 

아니면 그냥 순수도 :

@"key",@"value", 
@"key",@"value", 
@"key",@"value", 
@"key",@"value", 
...etc... 

어떻게 인라인 내 소스 즉, 코드,이 같은 뭔가 값의 수천하지 않고이 값을 가진 NSDictionary (예를 들어) initialse 않습니다 이 같은 배열 :

char[] tokens = { 
    #import "schoolnames.h" 
    #import "universitynames.h" 
    } 

내가 무엇을 찾고 있어요 것은 목표 - C를 "속임수"가 아니라, 컴파일러 가져 오기를 지시 또는 C 빨 수있는 방법에 대한 이해의 더 다른 파일의 존재. 필자는 필요한 경우이를 달성하는 방법에 대한 다른 아이디어를 공개합니다.

+0

에서로드 될 때마다 같은 전처리를 남용하지 마십시오을 읽을 수 있도록해야 할 것입니다 ... –

+0

소스 코드에 10,000 개의 값을 복사하여 붙여 넣지 않아도되는 것을 어떻게 피할 수 있습니까? – Jacob

답변

0

많은 검색을 한 후에 텍스트 파일이 어디에나 있는지 확인하지 않고도이 작업을 수행 할 수있는 간단한 방법을 찾았습니다.

#define SAMPLE_ARRAY \ 
@"a", @"value",\ 
@"b", @"value",\ 
@"c", @"value",\ 
...etc... 

그리고 가져 오기 또는 같이 사용할 :

tokens = [[NSDictionary alloc] initWithObjectsAndKeys: 
    SAMPLE_ARRAY 
    SAMPLE_ARRAY2 
    nil]; 

감안할 때 데이터를 변경하지 않을 것, 내가 가진 모든 주요 문제를 볼 수 없습니다 당신은 당신의 헤더 파일은 다음과 같이 할 수 있습니다 이.

0

텍스트 파일이 위에 표시된 형식이면에 데이터를 읽을 수있는 간단한 파서를 작성해야합니다.

"어휘"형식이 간단하기 때문에 NSScanner에 기반한 선형 파서는 간단하게 구현할 수 있습니다.

+0

정확히 내가 생각하고 있었던 것. – drekka

+0

이것은 응용 프로그램/바이너리가 실행될 때마다 텍스트 파일을 구문 분석해야한다는 것을 의미합니다. – Jacob

3

NSArrays의 NSDictionary 인 plist를 만들 수 있습니다. 그런 다음 plist를 NSDictionary로 쉽게 읽은 다음 각 배열을 검색합니다. 지적

NSString *path = [[NSBundle mainBundle] pathForResource:@"yourFile" ofType:@"plist"]; 
NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithContentsOfFile:path]; 
NSArray *array = [dict objectForKey:@"array1"]; 

,이 한 번 이상 앱이 '실행하지 않는'상태

+0

그건 분명히 깔끔한 목표입니다. 나는 그것을 좋아합니다. 사람들은이 옵션을 더 자주 고려해야합니다. 특히 파서 코드를 작성하지 않아도되기 때문에 특히 그렇습니다. – Jacob

+0

plist는 매우 편리하고 해석하기 쉽습니다. plist의 데이터 구조를 JSON과 비슷하게 처리 할 수 ​​있으므로 배열, 사전, 문자열 및 숫자 그룹을 정의 할 수 있습니다. 이것은 매우 다재 다능 한 수 있습니다. – dmanxiii