2011-03-01 6 views
1

편집 : 알아 냈습니다. appDelegate.detailViewController.thisRequest = aRequest;로 appDelegate 인스턴스를 통해 속성에 액세스 할 수있었습니다.iPad 앱에서 DetailViewController의 속성을 설정할 수 없습니다.

나는 아주 간단한 iPhone 네비게이션 기반 앱을 Split View iPad 앱에 이식하고 있습니다. 마스터보기에서 네비게이션 수준이 두 개 있습니다. 사용자는 첫 번째 테이블에서 값을 선택하고 두 번째 테이블을로드합니다. 두 번째 테이블에서 값을 선택하면 상세 뷰에 대한 상세 항목이로드됩니다. 아니면 그렇게 될 것입니다. DetailViewController의 속성을 오류없이 설정할 수는 있지만 실제로 설정하는 것으로는 보이지 않습니다. 그냥 null입니다.

나는 SplitView 템플릿을 아주 잘 따르고 있습니다. 나는 두 번째 TableViewController를 추가하여 두드러진 트랙에서 벗어나고 있습니다. 내 RootViewController는 didSelectRowAtIndexPath에 두 번째 TableViewController를로드하고 그 부분은 작동합니다. 내 두 번째 TableViewController.m에서 DetailView에 대한 세부 항목을 설정하려고합니다. didSelectRowAtIndexPath에서 내 세부 정보를 얻을 수 있지만 설정할 때 설정하지 않습니다. 여기

코드입니다 :

첫째, 내 DetailViewController에, 내 필드를 채울 객체의 속성 (* thisRequest)를 설정

:

DetailViewController.h :

@interface DetailViewController : UIViewController <UIPopoverControllerDelegate, UISplitViewControllerDelegate> { 

UIPopoverController *popoverController; 
UIToolbar *toolbar; 

Request *thisRequest; 
} 

DetailViewController.m :

@interface DetailViewController() 
@property (nonatomic, retain) UIPopoverController *popoverController; 
- (void)configureView; 
@end 

@implementation DetailViewController 

@synthesize toolbar, popoverController, detailItem, detailDescriptionLabel; 
@synthesize thisRequest; 

그런 다음 내 두 번째 표 ViewController, DetailViewController에 대한 참조를 유지하려고합니다 (이것이 엉망입니다. 나는 여전히 사물이 어떻게 지속되고이 틀에서 그들을 어떻게 참조 할 수 있는지를 완전히 이해하지 못한다.

RequestsTableViewController.h :

@class TrackerSplitViewAppDelegate, RequestsTableViewController, DetailViewController; 

@interface RequestsTableViewController : UITableViewController { 
    NSString* selectedDepartmentID; 
    NSMutableArray *requests; 
    DetailViewController *detailViewController; 
} 

@property (nonatomic, retain) NSString* selectedDepartmentID; 
@property (retain, nonatomic) NSMutableArray *requests; 
@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController; 

RequestsTableViewController.m :

@implementation RequestsTableViewController 

@synthesize selectedDepartmentID; 
@synthesize requests; 
@synthesize detailViewController; 

<snip> 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    TrackerSplitViewAppDelegate *appDelegate = (TrackerSplitViewAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    Request *aRequest = [appDelegate.requests objectAtIndex:indexPath.row]; 
    detailViewController.thisRequest = aRequest;  
    NSLog(@"Request Loaded: %@", aRequest.Title); 
    NSLog(@"detailViewController.thisRequest: %@", detailViewController.thisRequest.Title); 
    [appDelegate release]; 

} 

aRequest 객체로드 잘하고 detailViewController.thisRequest = aRequest; 선은 오류없이 실행되지만 내 로그 출력은 다음과 같습니다

2011-03-01 10 : 07 : 22.584 TrackerSplitView [8162을 : 40B] 요청로드 : 07 : 22.585 TrackerSplitView 2011-03-01 10 MyTitleString [8162 : 40b] detailViewController.thisRequest : (null)

내가 말했듯이, 나는 여전히 모든 것이 iOS 프레임 워크에서 어떻게 전달되는지 완전히 이해하지 못하지만, SplitNavigation 템플릿은 id와 거의 동일한 것을 수행합니다 가치와 그것은 잘 작동합니다. 내가 볼 수있는 유일한 차이점은 네비게이션 레이어가 내 위치에 중첩되어 있지 않으며 사용자 정의 개체 대신 정수이기 때문에 ID에 대한 포인터를 사용하지 않는다는 것입니다.
내 RequestTableViewController에 detailViewController를 제대로 전달하지 못하고 있다고 생각하지만 어떻게해야하는지 알 수 없습니다.

답변

0

편집 : 알아 냈습니다. appDelegate.detailViewController.thisRequest = aRequest;로 appDelegate 인스턴스를 통해 속성에 액세스 할 수있었습니다.

다음 버그로 이동합니다.

관련 문제