2013-03-04 1 views
2

plist 파일에서 데이터를 읽으려고했습니다. 이 내가 cellForRowAtIndexPathplist 파일을 읽고 UItableView를 채우는 방법은 무엇입니까?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
    UITableViewCell *cell = [[UITableViewCell alloc] 
          initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"]; 

    NSString *currentTermsName = [termKeys objectAtIndex :[indexPath row]]; 
            [[cell textLabel] setText:currentTermsName]; 
    cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton; 


    detail = [terms objectAtIndex:indexPath.row]; 

    NSLog(@" bombs %@",terms[@"Bomb Threats"]); 
    return cell; 

} 

에서 세부 사항을 액세스하고 볼 didload에 내가

- (void)viewDidLoad 
    { 
     [super viewDidLoad]; 


     NSString *myfile = [[NSBundle mainBundle] 
          pathForResource:@"terms" ofType:@"plist"]; 
     terms = [[NSDictionary alloc] initWithContentsOfFile:myfile]; 
     termKeys = [terms allKeys]; 
    } 
이 어떻게

@property (nonatomic, strong) NSArray *terms; 
@property (nonatomic, strong) NSArray *termKeys;//this is just a array to keep track 
@property (nonatomic, strong) NSString *detail; 

이는

|term|detail(string)| 

내 속성을 구성하는 방법입니다

액세스 es는 값을 저장하지만 각 객체에 대해 동일한 것을 저장합니다. plist에 5 개의 다른 레코드가 있다고 말하도록합니다. 세부 사항을 인쇄하면 동일한 레코드가 5 번 표시됩니다. http://pastebin.com/bxAjJzHp

목표는에 세부 정보를 전달하는 것입니다 : 여기

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    [self performSegueWithIdentifier:@"detailsegue" sender:self]; 
} 

내 사전입니다 : 세부가 설정되면

가 나는 마침내

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{ 
    if([segue.identifier isEqualToString:@"detailsegue"]){ 
     TermsDetailViewController *controller = (TermsDetailViewController *)segue.destinationViewController; 
     controller.detailTerm = detail; 
    } 
} 

및 detialView에 전달 Master/Detail 샘플 프로젝트와 같은 detailviewcontroller.

답변

1

cellForRowAtIndexPath: 메서드에서 변수를 설정할 수 없습니다.이 값은 일시적입니다. 사용자가 클릭하는 공개 키가 아니라 테이블을 스크롤하는 방식에 따라 다릅니다.

이동 문제를 해결하기 위해 performSegueWithIdentifier:의 호출 전에 didSelectRowAtIndexPath:이 라인

detail = [terms objectAtIndex:indexPath.row]; 

. detailprepareForSegue: 호출 직전에 사용자의 클릭에 응답하여 설정되고, 세부 값 데이터가있는보기 컨트롤러에 올바른 값이 전달되도록합니다.

+0

감사합니다. 해결책은 예외를 던지고 있습니다. -' [NSArrayM objectForKey :] : 인스턴스로 전송 된 인식 할 수없는 선택자 0xaa55a40' 문제가 될 수 있습니다. – meda

+0

@meda 코드에서 한 줄을 복사 했으므로 그것은 무언가 다른 것입니다. 'objectForKey :'의 호출은'terms'를 지시합니다. 이것은'NSArray'가 아니라'NSDictionary'입니다. 오류가 수정 된 코드에서 비롯된 것이고 예외로 인해 열 수있는 기회가없는 새보기 컨트롤러의 코드에서 발생하지 않았습니까? – dasblinkenlight

+0

이것은 내 첫 번째 앱이므로, 몇 가지 실수가있을 수 있습니다. 무엇을 조언합니까? – meda

관련 문제