2012-06-24 2 views
0

내 응용 프로그램에서는 viewController가 UIWebView를 관리합니다. Is는 응용 프로그램의 기본 스토리 보드로 생성됩니다. 이 응용 프로그램은 rtf 전자 메일 첨부 파일을 열고 해당 UIWebView에 표시 할 수 있습니다.iOS의 전자 메일 첨부 파일에서 응용 프로그램을 시작할 때의 순서

응용 프로그램이 백그라운드에서 실행되면 모든 것이 정상입니다. 응용 프로그램 대리자 메서드

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation 

가 호출되고 방법

[viewController loadImportedRTFDocument:url]; 

거기라고합니다. 컨트롤러가 문서를로드하고 표시합니다.

메일 응용 프로그램에서 첨부 파일을 선택할 때 응용 프로그램이 백그라운드에 있지 않으면 해당 응용 프로그램이 올바르게 시작됩니다. App 대리자 openURL이 호출되고 viewController는 가져온 문서를로드하라는 메시지를받습니다. 그러나 UIWebView가 할당되지 않았으므로 포인터를 표시 할 수 없습니다 (포인터를 반환 함).

내가 관찰 한 일은 컨트롤러가 나는의 ViewController가 제대로이 상황에서 초기화 된 것을 확신 할 수 방법의 viewDidLoad 메시지 ...

를 받기 전에 응용 프로그램의 위임에 의해 호출 된 메소드가 이루어지는 것이이며, 어디 UITebText 첨부 파일과 관련된 NSData 개체를로드하도록 요청해야합니까?

+0

같은 viewController를 사용하여 모든 문서를 표시 하시겠습니까? 아니면 각각의 문서를 다시 할당 하시겠습니까? –

+0

예, 메모리를 절약하기 위해 하나의 UIWebView를 처리하는 viewController는 하나뿐입니다. 컨트롤러는 필요한 경우 문서 HTML 컨텐트를 뷰에로드합니다. 메인보기 인터페이스를 설명하는 스토리 보드 파일을로드하는 동안 뷰는 alloc-init'ed로 간주됩니다. – Denis

답변

0

당신은 실행 루프의 끝에서 loadImportedRTFDocument에 전화를 넣어 NSObject의 performSelector를 사용할 수 있습니다 (즉, 응용 프로그램은 완전히로드 및 유휴 후.) 전에 호출되도록

// Will be called after app has loaded 
[viewController performSelector:@selector(loadImportedRTFDocument:) withObject:url afterDelay:0]; 
+0

죄송합니다, 저는 아마 바보입니다. 나는 그 뜻을 이해하지 못합니다 ...하지만 그 시도는 실패합니다 ... 아무 효과가 없습니다. – Denis

+0

'[viewController loadImportedRTFDocument : url'을'[viewController performSelector : @ selector (loadImportedRTFDocument :) withObject : url afterDelay : 0]; '? 만약 그렇다면, viewController가 nil이 아닌지를 검사 할 수 있습니까? – jjv360

+0

viewController는 결코 절대로 없습니다. 이것은 설명 된 것을 포함하여 테스트 된 모든 경우에 nil을 반환하는 UIWebView 속성입니다. 솔루션은 iOS 6에 종속되어야하고 공식 릴리스까지는 NDA가 있어야하므로 여기서는 더 이상 설명 할 수 없습니다. – Denis

0

loadImportedRTFDocument 뷰가로드됩니다. 이를 해결하려면 URL을 저장 한 다음 viewDidLoad에 웹보기로로드하십시오. 앱이 백그라운드에있을 때 이중로드를 피하려면 loadImportedRTFDocument으로 전환하여 webView가 초기화 된 경우에만 URL을로드합니다. 이 방법을 사용하면 뷰가로드되었는지 여부에 따라 WebView를 viewDidLoad 또는 loadImportedRTFDocument에로드해야합니다.

또한이 솔루션은 URL이 여전히 유효하고 리소스가 여전히 존재하는 경우 webView가 memoryWarning을 사용하여 언로드 된 경우에도 데이터를 표시합니다.

관련 문제