2014-01-25 1 views
0

에서 ViewController.m 메서드를 호출 어떻게 무효 "데이터 저장"이 있습니다내 ViewController.m에서 AppDelegate.m

#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 
@synthesize myDatePicker, myTextField; 

-(void)saveData 
{ 
NSArray *value = [[NSArray alloc] initWithObjects:[myTextField text],[myDatePicker date], nil]; 
[value writeToFile:[self getFilePath] atomically:YES]; 

} 

을 그리고 난 내 무효 "데이터 저장"을 사용하고자하는 내 AppDelegate.m :

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 

[self.ViewController saveData]; 

} 

그러나 Xcode는 "ViewController"와 "saveData"를 인식하지 못합니다.

내 AppDelegate에서 # import를해야할지 모르겠다. 도와주세요.

+0

현재 답변은 정확합니다. 처리하려는 알림을 관측 컨트롤러에서 관찰하십시오. 그러나 귀하의 전화는 틀에 얽매이지 않습니다. 호출하려는 메서드가있는 View Controller를 참조 할 수있는 속성이 있습니까? 컴파일러 오류는 올바르게 설정되지 않았 음을 알려줍니다. – Abizern

답변

1

당신이 viewcontroller에서 app delegate로 접근하는 방법은 당신이 가지고있는 viewcontrollers의 수/현재 네비게이션 계층 구조에있는 위치 등에 따라 달라질 것입니다. 속성을 추가 할 수도 있고 아마도 app delegate의 속성이 될 수도 있습니다 rootViewController.

그러나 앱이 백그라운드로 들어갈 때 viewcontroller에서 알림을 듣는 것이 좋습니다. 즉, 필요한 논리가 뷰 컨트롤러 내에 완전히 포함될 수 있으며 앱 대리자는 그것에 대해 알 필요가 없습니다. 구현, 그런 방법

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(applicationDidEnterBackground:) 
              name:UIApplicationDidEnterBackgroundNotification 
              object:nil]; 

을 : 당신의 ViewController의 초기화 방법에

, 당신은 알림을 받도록 등록 할 수 있습니다

- (void)applicationDidEnterBackground:(NSNotification *)notification 
{ 
    [self saveData]; 
} 

을 그리고 당신은 또한 당신의 ViewController 년대에 관찰자로서 자신을 제거해야합니다 dealloc 방법 :

-(void)dealloc 
{ 
    [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationDidEnterBackgroundNotification object:nil]; 
} 
+0

당신이 말한대로했는데 응용 프로그램을 닫을 때 문제가 생겼습니다. 일단 다시 열려고하면 오류가 발생하고 열리지 않습니다. 나는 거기에서 무슨 일이 일어나고 있는지 모른다. ((공백에 NSNotification 뒤에 *가 있어야 함)) –

+0

예, *가 있어야하며 내 대답이 업데이트되었습니다. 충돌 할 때 어떤 오류 메시지가 나타 납니까? 어떤 라인이 끊어 질까요? –

+0

오류 메시지가 없습니다. xCode를 닫고 시뮬레이터를 다시 시작한 iOS 7을 실행하는 iOS 시뮬레이터에 앱을 설치하면 처음에는 작동하지만 앱을 닫고 다시 열면 앱을 "저장 한"내용이 표시 될 것으로 예상됩니다. 열리지 마라. 그냥 .. –

0

" >

#import "ViewController.h" 

이것은의 ViewController 볼 수 AppDelegate에에 사용자 정의 클래스를 만들 것입니다 - appDelegate.m "상단에 구현 파일이 가져 오기를 수행합니다.

- (void) saveData 메서드를 다른 클래스 (이 경우 다른 클래스는 AppDelegate 클래스)에서 호출하려면이 메서드를 공용 인터페이스에서 선언해야합니다. 즉, ->

#import "ViewController.h" 


@interface ViewController() 

-(void)saveData; 

@end 
+0

내가 말했듯이 # import를했는데 Xcode가 viewController 나 "saveData"를 다시 인식하지 못하기 때문에 AppDelegate.m에'[self.viewController saveData]'를 추가 할 수 없습니다. –

+0

self.ViewController는 appController라는 appDelegate에 속성을 만들었다는 것을 의미합니다.첫 번째 문제는 UpperCase로 시작한다는 것입니다. viewController로 이름을 변경하십시오. 다른 점은 실제로 해당 viewController의 적절한 인스턴스가 있습니까? 아마도이 속성은 초기화되지 않았을 것입니다. 인스턴스의 개념을 이해합니까? 어리석은 소리 일지라도 물어볼 필요가있다. (미안해) 그렇지 않으면 너는 얼마나 깊은지를 잘 모른다. –

+0

appDelegate.h 및 appDelegate.m을 표시 할 수 있습니까? –