「Openwith...」機能を統合しようとしています。
私のAppDelegate.m
中に
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
...
_fileContent = [NSString stringWithContentsOfURL:url
encoding:NSUTF8StringEncoding
error:&error];
...
ViewController *vc = (ViewController*)self.window.rootViewController;
[vc refreshUI:nil];
}
私はARCを使用しているので、次のように呼び出すだけで、ViewController.h
後で省略@synthesize
します。.m
@property (nonatomic, retain) IBOutlet UITextView *textView;
私のViewController.m
中には次のものがあります
-(void)refreshUI:(id)sender
{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication] delegate];
if ([appDelegate openedFromURL])
{
NSLog(@"[refreshUI] appDelegate openFromURL (Length: %d)", [appDelegate.fileContent length]);
NSLog(@"Contents before: %@", [_textView text]);
[_textView setText:appDelegate.fileContent];
NSLog(@"Contents after: %@", [_textView text]);
}
...
}
別のアプリケーション(Dropbox)からファイルを開くと、最初のNSLogでファイルの正しい長さがわかります。2番目のNSLogはUITextViewの正しい「古い」コンテンツを提供し、3番目のNSLogは正しい「新しい」コンテンツを提供します(ドロップボックスアプリを介して「開いた...」ファイルのコンテンツを開始します)。したがって、データは私のアプリに届きます。
問題は、UITextViewが更新されないことです。UIViewControllerの他のボタンを押して(別のUIViewControllerに切り替えます)、「ViewController」に戻ると、UITextViewが正しいデータで更新されます。UIButtonをに追加し[self refreshUI]
、UITextViewの更新のみを呼び出すようにアクションを設定した場合でも。
AppDelegateから呼び出されているメソッドからそれ自体が更新されることはありません。
私は何が間違っているのですか?を使用してUITextViewを手動で再描画してみましたsetNeedsDisplay
。しかし、それは効果がありませんでした。
ありがとう