UIWebView iOS 8操作扩展在iOS 8移动狩猎中崩溃



iOS 8操作扩展应用程序的View具有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];
    }
}

我遇到了同样的问题,在后台使用UIWebView为我的应用程序抓取一些内容。当我连接到调试器时,它工作得很好。但是在没有调试器的情况下运行相同的构建总是崩溃。

我通过迁移到WKWebView解决了这个问题,这实际上很容易。我想UIWebView太旧了,效率太低,无法在Safari内部的扩展中运行。使用WKWebView效果非常好。

然后,当我使用完web视图并保存数据时,我发现了一个崩溃。我将它保存到NSUserDefaults(使用我的组容器),以传递到主应用程序。这也总是崩溃,所以我删除了那个代码。我最终使用了CoreData,它也很好用。

现在我有了一个无故障的Safari扩展!:)