dob*_*iho 9 objective-c uiwebview ios
iOS 8动作扩展应用程序的视图具有UIWebView.当我在Safari中打开此操作扩展时,然后扩展应用程序显示移动Safari的URL的UIWebView.
但扩展应用程序有时会在加载网页或滚动浏览某些网页(例如nytimes.com)时崩溃.
我知道扩展应用程序的可用内存取决于移动Safari.
但我发现'Safari的真棒截图'并没有崩溃.(https://itunes.apple.com/us/app/awesome-screenshot-for-safari/id918780145)
我想知道如何防止动作扩展应用程序崩溃.
@interface ActionViewController ()
@property(strong,nonatomic) IBOutlet UIImageView *imageView;
@property (strong, nonatomic) IBOutlet UIWebView *webView;
@end
@implementation ActionViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSExtensionItem *item = self.extensionContext.inputItems.firstObject;
NSItemProvider *itemProvider = item.attachments.firstObject;
if ([itemProvider hasItemConformingToTypeIdentifier:(NSString *)kUTTypeURL]) {
__weak typeof(self) weakSelf = self;
[itemProvider loadItemForTypeIdentifier:(NSString *)kUTTypeURL options:nil completionHandler:^(id<NSSecureCoding> item, NSError *error) {
if (error) {
[weakSelf.extensionContext cancelRequestWithError:error];
return;
}
if (![(NSObject *)item isKindOfClass:[NSURL class]]) {
NSError *unexpectedError = [NSError errorWithDomain:NSItemProviderErrorDomain
code:NSItemProviderUnexpectedValueClassError
userInfo:nil];
[weakSelf.extensionContext cancelRequestWithError:unexpectedError];
return;
}
NSURL *url = (NSURL *)item;
[weakSelf.webView loadRequest:[NSURLRequest requestWithURL:url]];
}];
} else {
NSError *unavailableError = [NSError errorWithDomain:NSItemProviderErrorDomain
code:NSItemProviderItemUnavailableError
userInfo:nil];
[self.extensionContext cancelRequestWithError:unavailableError];
}
}
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,在后台使用 UIWebView 为我的应用程序抓取一些内容。当我连接到调试器时它工作得很好。但在没有调试器的情况下运行相同的构建总是会崩溃。
我通过迁移到 WKWebView 解决了这个问题,这实际上非常简单。我猜想 UIWebView 太旧了而且效率低下,无法在 Safari 内部的扩展中运行。使用 WKWebView 效果很好。
然后,当我使用完网络视图并保存数据时,我发现了崩溃。我将其保存到 NSUserDefaults (使用我的组容器)以传递到主应用程序。这也总是崩溃,所以我删除了该代码。我最终使用了 CoreData,效果也很好。
现在我有了一个不会崩溃的 Safari 扩展!:)
| 归档时间: |
|
| 查看次数: |
1459 次 |
| 最近记录: |