2014-10-08 119 views
9

iOS 8操作擴展應用程序的視圖具有UIWebView。當我在Safari中打開此操作擴展,然後擴展應用程序顯示移動Safari的URL的UIWebView。UIWebView iOS 8操作iOS 8移動Safari中的擴展崩潰

但是擴展應用程序有時在加載網頁或滾動它像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]; 
    } 
} 
+0

你有任何錯誤日誌? – ytbryan 2014-10-08 03:24:55

+0

在模擬器或調試模式下沒問題,但有時會在實模式下崩潰。我沒有任何代碼來擴展應用程序,只是在代碼上方。 – dobiho 2014-10-08 04:38:12

+0

我有完全相同的問題,一直在等待年齡的評論,在這篇文章中,直到我得到50分:)。你有沒有得到任何解決方案?在許多情況下,我懷疑它是JavaScript的分配限制爲10MB(請參見[這裏](https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIWebView_Class/index.html#// apple_ref/OCC/instm/UIWebView中/ stringByEvaluatingJavaScriptFromString :))。你知道如果網站崩潰了有一些額外的JS活動。 – Antenehs 2014-11-11 08:34:15

回答

1

我遇到同樣的問題,使用一個UIWebView在後臺刮我的應用程序的一些內容。當我連接到調試器時它工作正常。但是沒有調試器的情況下運行相同的版本總會崩潰。

我解決了它的遷移到WKWebView,這實際上很簡單。我猜UIWebView太舊了,效率低下,無法在Safari中的擴展中運行。使用WKWebView工作得很好。

然後我發現了一個崩潰,當我完成使用web視圖並保存我的數據。我將它保存到NSUserDefaults(使用我的組容器)傳遞給主應用程序。這總是崩潰,所以我刪除了該代碼。我結束了使用CoreData,而且也工作得很好。

現在我有一個崩潰免費的Safari擴展! :)

+0

有同樣的問題,切換到WKWebView修復它。謝謝! – 2015-03-02 04:35:43