2010-05-12 4 views
1

폼으로 작동하는 UITableView를 설정하려고합니다. 각 셀은 그것 UILabel의와의 UITextField에서이 있으므로 하나의 셀은 다음과 같습니다숫자로 NSDictionary 항목을 참조 할 수 있습니까?

Name   <enter name> 
^   ^
UILabel  UITextField 

지금, 나는 그것이과 같이 구성 년대 UILabel의과 (A PLIST에서)이있는 NSDictionary에서의 UITextField를 채우기 위해 노력하고있어 :

Root   Type   Value 
    Name   String 
    Address  String 
    City   String 

    etc 

그러나 cellForRowAtIndexPath 방법의 오른쪽 라벨과 텍스트 필드를 얻기 위하여

, 나는 수치 사전을 참조해야합니다. 그것을 할 방법이 있습니까?

답변

4

아니요, NSDictionary의 요소가 정렬되지 않았기 때문에 아니요.

테이블 뷰 데이터 소스 뒤에있는 모델로 배열을 사용해야합니다. 귀하의 사례에 맞게 쉽게 구축 할 수 있습니다.

NSArray* myArray = [myDict allKeys]; 

물론 귀하의 경우 특별 주문이 필요합니다. 따라서 리터럴을 사용하여 배열을 만들 수 있습니다.

NSArray* myArray = [NSArray arrayWithObjects:@"Name", @"Address", @"City", nil]; 
+0

또한 배열을 사용하고 각 요소에 각 행에 대한 데이터가 포함되도록하는 것이 좋습니다 – Tomen

+0

편집을 위해 양식에 표시하려는 의사 사전 (예 : NSManagedObject)을 사용하는 것은 매우 일반적인 경우입니다. 이 경우 데이터를 배열로 강제 저장하는 것은 적절하지 않습니다. –

+0

배열은 테이블 뷰 데이터 소스 모델에 대한 요구 사항과 일치합니다 (정렬 된 개체 컬렉션에 대한 인덱싱 된 액세스 제공). 요소의 요소를 사용하여 모델의 다른 부분에 액세스 할 수 있지만 데이터에 액세스하는 방법은 배열의 객체를 통해 안내합니다. –

2

엄밀히 말하면, 아니오.

내가하는 경향이있는 것은 키 시퀀스를 별도로 생성하는 것입니다. 순서가 정해져 있으므로 순서가 올바르게됩니다. 예 :

NSDictionary *values = ... 
NSArray *keys = .... 

for (NSString *key in keys) { 
    id value = [values objectForKey:key]; 
    ... 
} 

다른 사람이 지적한 것처럼, 정렬 된 목록이 필요하다 (즉, NSArray는) 길있는 UITableView 작품을 개발하였습니다. 그러나 이것은 데이터 자체 일 필요는 없습니다. 데이터가 NSDictionary 나 NSManagedObject 인 경우 양식에서 해당 데이터를 편집하는 일반적인 관용구가 있습니다. iPhoneOS에서는 거의 항상 UITableView을 의미합니다.

이 경우 편집 된 개체의 모든 요소를 ​​표시하고 필드의 제목을 표시하고 표시 순서를 제어하려고 할 것입니다. 이는 모두이 상황에 대해 유효한 (모호하지 않은) 패턴이라는 것을 의미합니다.

이 특별한 경우 키는 plist에서 가져올 수 있지만 plist XML을 구문 분석하여 가능하지만 일반적인 방법으로 키를 추출하는 것은 중요하지 않습니다.

+0

:

귀하의 plist는 같이 보일 것인가? – cannyboy

+0

키 배열의 순서대로 열거됩니다. 내가 희망하는 바는 정확합니다 :-). –

+0

그냥 명확히하기 위해 사전의 키와 일치하도록 배열을 설정해야합니다 ... keys = [NSArray arrayWithObjects : @ "Name", @ "Address", @ "City", nil]; ... 그리고 열거합니까? 그래서 이름 짓기와 쉐이핑을하지 않고 plist에있는 순서로 키를 가져올 방법이 없습니다. – cannyboy

2

plist를 사전 배열로 재구성해야합니다. 사전 키는 채워야하는 요소이고 값은 텍스트입니다. plist 배열에 각 사전을 화면에 표시 할 순서대로 추가하십시오. 이것은 효과적으로 설정 응용 프로그램이 작동하는 방식입니다. 사용자가 입력 한 텍스트를 저장하는 것은 매우 간단합니다. 이 올바른 순서로 열거겠습니까

<root> 
    <array> 
     <dict> 
      <key>labelText</key> 
      <value>Name</value> 
      <key>textFieldPromptText</key> 
      <value>enter name</value> 
      <key>textFieldText</key> 
      <value>name entered by user</value> 
     </dict> 
     <dict> 
      <key>labelText</key> 
      <value>Address</value> 
      <key>textFieldPromptText</key> 
      <value>enter street address</value> 
      <key>textFieldText</key> 
      <value>address entered by user</value> 
     </dict> 
     <dict> 
      <key>labelText</key> 
      <value>City</value> 
      <key>textFieldPromptText</key> 
      <value>enter city</value> 
      <key>textFieldText</key> 
      <value>city entered by user</value> 
     </dict> 
     . 
     . 
     . 
    </array> 
</root> 
+0

@cannyboy가 필요로하는 것을 분명히 진술 해 주셔서 감사합니다. –

관련 문제