2016-05-24 1 views
0

Je développe une application iOS qui permet à l'utilisateur d'enregistrer des URL, similaire à l'application Pocket. Dans l'application, j'ai une extension de partage qui enregistre simplement l'URL dans un NSUserDefaults basé sur le groupe d'applications. Pour une raison quelconque, l'extension de partage entraîne le blocage du safari mobile (non réactif) après la sélection de l'extension de partage. Le code pour l'extension de partage est si simple, je me demande ce qui peut l'avoir causé. Lors du débogage dans Xcode, la fonction de l'extension de partage n'est pas appelée du tout, semble-t-il. Des indices? Cela fonctionne sur iOS 9.3.L'extension de partage fait que le safari se bloque dans l'iphone

Voici le code:

// 
// ShareViewController.swift 
// intrafeedappShare 
// 
// Created by Dicky Johan on 5/21/16. 
// Copyright © 2016 Dicky Johan. All rights reserved. 
// 

import UIKit 
import Social 
import MobileCoreServices 

class ShareViewController: UIViewController { 

    var selectedURL: String? 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     let contentType = kUTTypeURL as String 

     guard let item = self.extensionContext?.inputItems.first as? NSExtensionItem else { 
       fatalError() 
     } 

     for attachment in item.attachments as! [NSItemProvider] { 
      if attachment.hasItemConformingToTypeIdentifier(contentType) { 
       attachment.loadItemForTypeIdentifier(kUTTypeURL as String, options: nil) { url, error in 
        if error == nil { 
         guard let url = url as? NSURL else { 
          self.extensionContext?.cancelRequestWithError(NSError(domain:"Url is empty",code:-1,userInfo: nil)) 
          return 
         } 
         self.selectedURL = url.absoluteString 

         let defaults = NSUserDefaults(suiteName: Constants.Settings.sharedAppGroup) 
         if let arrUrls = defaults!.objectForKey(Constants.Settings.sharedURLS) { 
          // append to the existing list 
          arrUrls.appendString(url.absoluteString) 

         } else { 
          let newArrUrl = [url.absoluteString] 

          defaults!.setObject(newArrUrl, forKey: Constants.Settings.sharedURLS) 
         } 
         defaults!.synchronize() 

         self.extensionContext?.completeRequestReturningItems(nil, completionHandler: nil) 


         let alert = UIAlertController(title: "Success", message: "Added url to intrafeed", preferredStyle: .Alert) 

         let action = UIAlertAction(title: "Done", style: .Default) { _ in 
          self.dismissViewControllerAnimated(true, completion: nil) 
         } 

         alert.addAction(action) 
         self.presentViewController(alert, animated: true, completion: nil) 

        } else { 
         self.extensionContext?.cancelRequestWithError(error) 

         let alert = UIAlertController(title: "Error", message: "Error loading url", preferredStyle: .Alert) 

         let action = UIAlertAction(title: "Error", style: .Cancel) { _ in 
          self.dismissViewControllerAnimated(true, completion: nil) 
         } 

         alert.addAction(action) 
         self.presentViewController(alert, animated: true, completion: nil) 
        } 


       } 
      } 
     } 


    } 


} 

Répondre

0

Ok, apparemment il y avait un accident dans le code, provoquant ainsi le bloquer Safari. Lors du débogage de l'extension dans Xcode, j'ai trouvé le problème.