2011-11-12 72 views
22

我實現了UIDocumentInteractionController以將文件發送到其他應用程序。該文件是一個.txt文件。UIDocumentInteractionController用於打開菜單 - 不起作用

下面的代碼:

UIDocumentInteractionController *interactionController = [[UIDocumentInteractionController alloc] init]; 
[interactionController setURL:[NSURL fileURLWithPath:filePath]]; 
[interactionController setUTI:@"public.text"]; 
[interactionController setDelegate:self]; 
[interactionController presentOpenInMenuFromBarButtonItem:actionBarButtonItem animated:YES]; 

菜單打開精細,呈現出如我所料一樣的頁面,Dropbox的,等等應用程序。但是,當我點擊其中一個時,Open In菜單關閉並且不執行任何操作(文件不發送,目標應用程序也不會打開)

我嘗試執行代理方法documentInteractionController:canPerformAction:documentInteractionController:performAction:來觸發複製: :?使用選項菜單(而不是在菜單中打開),以及拉起一個菜單,僅有頁面列出,但是這仍然沒有工作電話

怎麼可能這個解決

回答

49

我找到了答案,它是內存管理,我創建了UIDocumentInteractionController然後呈現它,但我沒有它作爲實例變量,ARC在它之前解除分配它作爲做任何事情的機會。這包括將文檔發送到外部應用程序。

這個錯誤沒有出現在iPhone上,但在iPad上,它提供了一個錯誤,因爲popover體系結構的工作原理有點不同,最終在解除分配時嘗試繪製它。這就是提醒我該錯誤的原因。

+0

謝謝!我一直在堆棧上搜索了很長時間,終於發現這個答案適用於我。 – huoxinbird

+1

這是ARC項目的答案。你必須爲UIDocumentInteractionController聲明一個屬性: @property(nonatomic,strong)UIDocumentInteractionController * docController; –

+0

thnx。花了幾個小時。但忘了弧。再多一次。 –

-4

它足以添加以下代碼:

[interactionController retain]; 
16

此錯誤也出現在iPhone/iPod的。剛剛設置:

@property (nonatomic, retain) UIDocumentInteractionController *docController; 

它會保留並將文件傳遞給新的應用程序。