2012-05-18 4 views
1

해결하려고하는 두 가지 문제가 있습니다. 하나는 탭 컨트롤러 자체를 새로 고치고 다른 하나는 tabcontroller의 콘텐츠를 새로 고치는 것입니다.iPhone이 탭 컨트롤러와 콘텐츠를 새로 고침

내가 탭 컨트롤러 자체를 새로 고침하려는 이유는 내 응용 프로그램이 탭 순서를 설정하고 각 탭의 내용을 설정하는 JSON을 반환하는 웹 호출을 가지고 있기 때문입니다. 탭 컨트롤러는 컨트롤러가 새로 고쳐집니다 사용자가 밖으로 백업 할 때 그와 다시 있도록 AppDelegates applicationDidEnterBackground :와에

exit(0) 

을 넣어 새로 고칠 때 다시 응용 프로그램 중 사용자와 응용 프로그램을 다시 입력하도록 나는 그것을 가지고 . applicationDidFinishLaunchingWithOptions에서 JSON을 호출하는 웹 호출을 설정 한 다음 JSON을 호출하여 탭 순서를 설정합니다. 나는 이것이 이것을하는 좋은 방법이 아니라는 것을 알고 있지만 당분간은 내가 생각할 수있는 유일한 해결책이다. 어떻게하면 TabController를 새로 고칠 수 있습니까?

는 탭의 내용에 관해서는,이 코드 나는 5 개 각 탭에 대한 코드까지의이 유형을 설정 한

becomeActiveObserver = [[NSNotificationCenter defaultCenter] 
         addObserverForName:UIApplicationDidBecomeActiveNotification 
         object:nil 
         queue: nil 
         usingBlock:^(NSNotification *note){ 

          [self refresh]; 
          [self viewDidUnload]; 
         }]; 

를 사용하여 새로 고쳐집니다. 이것은 잘 작동하지만 응용 프로그램이 종료되고 다시 액세스 될 때만 내용이 새로 고쳐집니다. 웹 전화는 주기적으로 진행되며 웹 통화가 이루어지면 콘텐츠를 다시 가져 오지 않고 응용 프로그램으로 다시 보내지 않아도됩니다.

테스트 목적으로 설정 화면 (설정 화면은 내 탭 중 하나의 다른보기 임)에서 읽기 JSON을 클릭하면 가져온 JSON과 다른 iPhone 디렉토리에 저장되는 버튼을 설정했습니다 웹 호출에서 (서버에 가서 JSON을 계속 변경하지 않아도됩니다.) 이 버튼을 클릭하면이 새 JSON을 읽고 내용을 업데이트 한 다음보기를 새로 고쳐야합니다. 이 테스트를 거쳤으며 JSON이 읽히고 데이터가 업데이트되고 있습니다 (각 화면에 버튼을 설정하여이를 확인하는 데 사용하는 버튼을 설정합니다).하지만 종료 할 때까지 뷰가 새로 고쳐지지 않습니다. 다시 신청하십시오.

내가 장치에 저장된 JSON을 읽을 수있는 설정 화면에서 설정 한 임시 코드는 하단에서

-(IBAction)RefreshApp:(id)sender{  



NSFileManager *fileManager = [NSFileManager defaultManager]; 

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"widgjson" ofType:@"json"]; 
    NSData *myData = [NSData dataWithContentsOfFile:filePath]; 
    NSString *responseString = [[NSString alloc] initWithData:myData encoding:NSUTF8StringEncoding]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *docDir = [paths objectAtIndex: 0]; 
     NSString *docFile = [docDir stringByAppendingPathComponent: @"json.txt"]; 
     [fileManager removeItemAtPath:docFile error:NULL]; 
     [responseString writeToFile:docFile atomically:NO encoding:NSUTF8StringEncoding 

DashboardVC *db = [[DashboardVC alloc] init]; 
    [db refresh]; 
    [db viewDidUnload]; 

} 

당신은 내가 하나를 새로 고침 탭 중 하나에서 새로 고침을 호출하려고 볼 수 있습니다 보기의 그것은 작동하지만, 행운을 볼 수 있습니다. 새로 고침 코드는 클래스 자체에서 호출 할 때만 작동하는 것처럼 보입니다. 다른 클래스에서 액세스 할 때 새로 고치는 것처럼 보이지 않습니다.

웹 전화가 걸려 오면 모든 탭을 한 번에 새로 고침하고 싶습니다. 내가 어떻게이 일을 할 수 있을지에 대한 아이디어가 있습니까?

누군가가 올바른 방향으로 나를 가리킬 수 있다면 매우 감사 할 것입니다.

+0

코드에 "exit()" "call * anywhere *를 넣지 마십시오. 이 방법으로 앱을 종료하면 (사용자가 앱을 수동으로 종료/종료하지 않는 경우) 앱 스토어에서 앱을 거부해야합니다. –

답변

2

UITabBarController의 setViewControllers: animated: 메서드는 여기에서 사용하려는 것입니다.

탭을 다시 정렬하려는 알림을 받으면 해당 기능을 사용하여 탭 표시 줄에서 소유하고 참조하는 다양한보기 컨트롤러를 배열의 순서대로 전달합니다 탭을 표시하고 싶습니다.

+0

나는 그 방법을 마침내 작동시키는 방법을 알아 냈다. 좋은 탭을 재주문하지만, 내용을 새로 고침하지는 않는다. 이 방법이이 작업을 수행하지 않습니까? – AdamM

+0

보기 컨트롤러를 업데이트하는 것은 탭 막대 Adam에 추가하는 것과는 별도입니다. View Controller에 콘텐츠를 업데이트하라는 말을 어떻게하면 좋을까요? "refreshMyData"메서드 또는 내용을 업데이트하기 위해 만든 메서드가 있습니까? 보기 컨트롤러가 내용을 업데이트하도록 지시하는 내용이 있으면 각 항목을 열거하고 탭 모음의 탭 순서를 설정하는 것과 동시에 사용자 정의 업데이트 방법을 호출하는 것이 좋습니다. –

+0

내 홈 탭인 DashboardVC에 새로 고침 메서드를 설정 했으므로 위에서 제공된 코드에서 새로 고침을 호출 한 것을 볼 수 있습니다. 이제는이 메소드 중 하나가 호출 될 때마다 인쇄되는 텍스트가 있기 때문에 새로 고침과 viewDidload 함수가 호출되는 것을 알고 있지만 내용이 다시 돌아올 때까지 업데이트되지 않습니다. 이것은 내가 가장 혼란 스럽습니다. DashboardVC * db = [[DashboardVC alloc] init]을 호출하고 새로 고침을 호출 할 때 DashboardVC의 새 인스턴스를 선언하기 때문입니까? – AdamM

관련 문제