2011-06-12 5 views
0

그래서 JSON 피드를 읽을 앱을 작성 중입니다. 내 응용 프로그램 : didFinishLaunchingWithOptions에서 JSON 문자열을 다운로드하고 로컬 NSString 변수에 저장하는 코드를 작성했습니다. 그런 다음 해당 문자열을 ListingsViewController (NavigationController의 루트 VC 임)로 전달합니다. ListingsViewController에서 JSON 데이터를 인쇄 할 때 viewDidLoad가로드되고 있다고 생각하게 만드는 me (null)이 표시됩니다. - 비논리적 인 것처럼 보입니까? 그래서 여기application : didFinishLaunchingWithOptions before viewDidLoad

내 응용 프로그램입니다 : 다음과 같이 didFinishLaunchingWithOptions

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 

    // Grab the feeds  
    NSURL *jsonURL = [NSURL URLWithString:@"http://www.shoofeetv.com/iphonexml/view/all_channels.json"]; 
    NSString *jsonData = [[NSString alloc] initWithContentsOfURL:jsonURL]; 

    // Pass jsonData to the ListingsViewController 
    ListingsViewController *listingsViewController = [[ListingsViewController alloc] initWithNibName:@"ListingsViewController" bundle:nil]; 
    listingsViewController.jsonData = jsonData; 
    [listingsViewController release]; 

    // Display the navigation controller 
    self.window.rootViewController = self.navigationController; 
    [self.window makeKeyAndVisible]; 

    return YES; 
} 

내있는 viewDidLoad 방법은 다음과 같습니다

- (void)viewDidLoad { 

    self.navigationItem.title = @"Listings"; 
    UIBarButtonItem *checkinButton = [[UIBarButtonItem alloc] 
            initWithTitle:@"Check In" 
            style:UIBarButtonItemStylePlain 
            target:self 
            action:@selector(switchView)]; 

    self.navigationItem.rightBarButtonItem = checkinButton; 
    [checkinButton release]; 

    NSLog(@"%@", self.jsonData); 

    [super viewDidLoad]; 
} 

는 공통의 해결책이 있는지 확인하는 것입니다 있습니다 MainWindow.xib에의 응용 프로그램 위임이 파일 소유자에게 연결되어야합니다. 내 것은 이미 연결되어 있습니다.

어떤 도움을 주셔서 감사합니다!

감사합니다.

+0

아 또한, 내가 넣어 두 NSLogs ( 다양한 네트워크 조건에서 귀하의 응용 프로그램을 테스트합니다 사과 ) 네트워크 오류를 비동기 JSON 데이터를로드하고 처리 할 필요가 있음을 기억 각 함수에서 viewDidLoad NSLog가 먼저 나타납니다. 감사합니다! – darksky

답변

0

코드로보기 컨트롤러를 설정하고 있지만 탐색 컨트롤러에는 표시되지 않습니다. 뷰 컨트롤러를 설정하고 jsonData에 문자열을 할당하고 뷰 컨트롤러를 즉시 삭제하십시오. # # m 당신이 얻는 결과물은 주 XIB에서 생성 한 다른보기 컨트롤러로부터 얻은 것입니다.

// Pass jsonData to the ListingsViewController 
ListingsViewController *listingsViewController = [[ListingsViewController alloc] initWithNibName:@"ListingsViewController" bundle:nil]; 
listingsViewController.jsonData = jsonData; 
[self.navigationController pushViewController:listingsViewController animated:NO]; 
[listingsViewController release]; 

// Display the navigation controller 
self.window.rootViewController = self.navigationController; 
[self.window makeKeyAndVisible]; 

이 실제로 만든 뷰 컨트롤러를 표시합니다 : 당신이 원하는 무엇을
은 XIB에 빈 탐색 컨트롤러를 생성 한 후 다음을 수행합니다.

또한 응용 프로그램을 배포 할 때, 당신은

+0

고맙습니다. 지금 제안을 드리겠습니다. 또한 "비동기 적으로로드"함으로써 NSURLConnection을 사용하여 데이터를 다운로드하고 다운로드했는지 확인해야합니다. – darksky

+0

이제는 잘 작동합니다. 데이터가 올바르게보기 컨트롤러에 전달되고 있지만 작은 문제가 있습니다. 내가 한 일은 "[self.navigationController pushViewController : listingsViewController animated : NO];" 하지만 이제 문제는 왼쪽 상단의 "루트보기 컨트롤러"에 뒤로 버튼으로 표시된다는 것입니다. 나는 "XIB에 빈 탐색 컨트롤러 만들기"부분을 얻지 못했을 것 같아요. 이걸 제발 도와 주실 수 있겠습니까? – darksky

+0

예, 그렇게해야 할 것입니다. 또는 로컬에서 다운로드하여 저장하고 업데이트 만 확인하십시오. 그러면 네트워크를 사용할 수 없을 때 로컬 컨텐트를 사용할 수 있습니다. –

관련 문제