2010-02-27 5 views
1

내 세부 정보보기에서로드 할 데이터를 가져 오려고합니다. 어느 누구도 한번 들여다보고 왜 그것이 보이지 않는지 볼 수 있습니까? 상세 뷰가 아닌 내 rootviewcontroller에서 제대로로드됩니다.데이터가 상세 정보로로드되지 않습니다.

DetailViewController.m

#import "DetailViewController.h" 


@implementation DetailViewController 




- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview 
    // Release anything that's not essential, such as cached data 
} 



- (void)setIcon:(UIImage *)newIcon 
{ 
    [super setIcon:newIcon]; 
    iconView.image = newIcon; 
} 

- (void)setPublisher:(NSString *)newPublisher 
{ 
    [super setPublisher:newPublisher]; 
    publisherLabel.text = newPublisher; 
} 


- (void)setName:(NSString *)newName 
{ 
    [super setName:newName]; 
    nameLabel.text = newName; 
} 



- (void)dealloc 
{ 
    [iconView release]; 
    [publisherLabel release]; 
    [nameLabel release]; 
    [priceLabel release]; 

    [super dealloc]; 
} 


@end 

는 detailviewcontroller.h

#import <UIKit/UIKit.h> 
#import <Foundation/Foundation.h> 




@interface DetailViewController : UIViewController { 
    IBOutlet UIImageView *iconView; 
    IBOutlet UILabel *publisherLabel; 
    IBOutlet UILabel *nameLabel; 
    IBOutlet UILabel *priceLabel; 

} 




@end 

RootViewControllerPoints.m

#import "RootViewControllerPoints.h" 
#import "DetailViewController.h" 




#define USE_INDIVIDUAL_SUBVIEWS_CELL 1 

#define DARK_BACKGROUND [UIColor colorWithRed:151.0/255.0 green:152.0/255.0 blue:155.0/255.0 alpha:1.0] 
#define LIGHT_BACKGROUND [UIColor colorWithRed:172.0/255.0 green:173.0/255.0 blue:175.0/255.0 alpha:1.0] 


@implementation RootViewController 

@synthesize tmpCell, data; 


#pragma mark View controller methods 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Configure the table view. 
    self.tableView.rowHeight = 73.0; 
    self.tableView.backgroundColor = DARK_BACKGROUND; 
    self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone; 

    // Load the data. 
    NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Data" ofType:@"plist"]; 
    self.data = [NSArray arrayWithContentsOfFile:dataPath]; 
} 


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation 
{ 
    switch (toInterfaceOrientation) { 
     case UIInterfaceOrientationPortrait: 
     case UIInterfaceOrientationLandscapeLeft: 
     case UIInterfaceOrientationLandscapeRight: 
      return YES; 
     default: 
      return NO; 
    } 
} 



#pragma mark Table view methods 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [data count]; 
} 


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *CellIdentifier = @"ApplicationCell"; 

    ApplicationCell *cell = (ApplicationCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 

    if (cell == nil) { 

#if USE_INDIVIDUAL_SUBVIEWS_CELL 
     [[NSBundle mainBundle] loadNibNamed:@"IndividualSubviewsBasedApplicationCell" owner:self options:nil]; 
     cell = tmpCell; 
     self.tmpCell = nil; 

#endif 
    } 

    // Display dark and light background in alternate rows -- see tableView:willDisplayCell:forRowAtIndexPath:. 
    cell.useDarkBackground = (indexPath.row % 2 == 0); 

    // Configure the data for the cell. 

    NSDictionary *dataItem = [data objectAtIndex:indexPath.row]; 
    cell.icon = [UIImage imageNamed:[dataItem objectForKey:@"Icon"]]; 
    cell.publisher = [dataItem objectForKey:@"Publisher"]; 
    cell.name = [dataItem objectForKey:@"Name"]; 


    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 

    return cell; 
} 



- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil]; 
    detailViewController. = [data objectAtIndex:indexPath.row]; 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController release]; 
} 



@end 

이 아주 잠시 동안 저를 도청하고있다, 나는 많은 검토 한 예제, 자습서 및 심지어 다른 아이폰 devs 물었다. 모든 소스가 다른 것을 말하는 것 같습니다.

+0

아이폰을 태그로 추가하십시오. 그러면 더 많은 답변을 얻을 수 있습니다. – Emil

+0

"detailViewController. = [data objectAtIndex : indexPath.row]"란 무엇입니까? didSelectRowAtIndexPath에서해야 할 일은 무엇입니까? 그것이 실제 코드입니까, 아니면 오타가 있습니까? 왜 detailViewController 뒤에 점이 있습니까? – DyingCactus

+0

아, 다른 사용자가 제안한 코드 라인이었습니다. 디버거가 입력 한 것처럼 오류가 발생합니다. 데이터를 모두 삭제해도 데이터는 하위 뷰로 전달되지 않지만 모두로드됩니다. – user278342

답변

1

첫 번째 문제는 DetailViewController의 setXXX 메서드는 super setXXX를 호출하려고하지만 DetailViewController는 UIViewController의 하위 클래스이므로 UIViewController에 이러한 메서드가 없으므로 super 호출이 실패합니다. setXXX 메소드에서 super 호출을 제거하십시오.

두 번째 문제는 setXXX 메서드가 DetailViewController의 컨트롤을 직접 설정하지만 뷰가로드 될 때까지 컨트롤에 액세스 할 수 없으므로 pushViewController 호출 전에 메서드가 호출되면 작동하지 않는다는 것입니다. 다음과 같이 didSelectRowAtIndexPath의 코드를 변경하는 경우

그것을 작동합니다 :

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    DetailViewController *detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil]; 
    [self.navigationController pushViewController:detailViewController animated:YES]; 
    [detailViewController setName:@"name here"]; 
    [detailViewController setPublisher:@"publisher here"]; 
    [detailViewController setIcon:yourImageVariableHere];  
    [detailViewController release]; 
} 

을 위의 변경 작업을해야하지만, 당신이 (DetailViewController의 값을 유지하기 위해 인스턴스 변수를 만드는 대신 UI를 사용하여 고려할 수 있습니다 데이터를 보유하기 위해 스스로 제어). 그런 다음 @property 및 @synthesize를 사용하여 속성을 만듭니다. 이 속성은 DetailViewController를 만든 직후 설정할 수 있으며 뷰의 viewDidLoad에서는 ui 컨트롤을 속성 값으로 설정할 수 있습니다. 이렇게하면 DetailViewController가 ui가 업데이트되는 방식을 더 많이 제어하고 호출자에게 영향을주지 않고 UI를 변경할 수 있으며 속성을 설정하기 위해 표시 할 필요가 없습니다.

관련 문제