我正在尝试集成“打开方式...”功能。
在我的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,所以我只在 my 中调用以下内容,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 为我提供了正确的文件长度。第二个 NSLog 为我提供了 UITextView 的正确“旧”内容,第三个 NSLog 为我提供了正确的“新”内容(从我通过 Dropbox 应用程序“打开...”的文件的内容开始)。所以数据确实进入了我的应用程序。
问题是 UITextView 没有得到更新。如果我按下 UIViewController 中的任何其他按钮(这会导致我切换到不同的 UIViewController),然后返回“ViewController”,则 UITextView 会使用正确的数据进行更新。即使我添加一个 UIButton 并将其操作设置为仅调用[self refreshUI]
UITextView 更新。
它只是不会从 AppDelegate 调用的方法中自行刷新。
我究竟做错了什么?我什至尝试手动重绘 UITextView setNeedsDisplay
。但这没有任何效果。
谢谢