UIWebView iOS 8 Accidente de extensión de acción en iOS 8 Safari mobile

La vista de la aplicación de extensión de acción iOS 8 tiene UIWebView. Cuando abro esta extensión de acción en Safari y luego la aplicación de extensión muestra UIWebView de la URL de Safari mobile.

Pero la aplicación de extensión se bloquea a veces durante la carga de la página web o desplazándose por algunas páginas web como nytimes.com.

Sé que la memory utilizable de la aplicación de extensión depende del Safari mobile.

Pero descubrí que 'Awesome Screenshot for Safari' no se bloquea. ( https://itunes.apple.com/us/app/awesome-screenshot-for-safari/id918780145 )

Me pregunto cómo evitar que la aplicación de extensión de acción se bloquee.

@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]; } } 

Estaba experimentando el mismo problema, usando un UIWebView en segundo plano para raspar algunos contenidos de mi aplicación. Funcionó bien cuando estaba conectado al depurador. Pero ejecutar la misma compilation sin el depurador siempre fallaba.

Lo resolví migrando a WKWebView , que en realidad era bastante fácil. Creo que UIWebView es demasiado antiguo e ineficiente para ejecutarse en una extensión dentro de Safari. El uso de WKWebView funcionó perfectamente.

Luego descubrí un locking cuando terminé de usar la vista web y estaba guardando mis datos. Estaba guardándolo en NSUserDefaults (usando mi contenedor de grupo) para pasar a la aplicación principal. Esto siempre estaba fallando también, así que eliminé ese código. Terminé usando CoreData en su lugar, que también funcionó bien.

¡Ahora tengo una extensión de Safari sin errores! 🙂