【问题标题】:Share extension causes safari to hang in iphone共享扩展导致 safari 在 iphone 中挂起
【发布时间】:2016-05-24 05:47:08
【问题描述】:

我正在开发一个允许用户保存 url 的 iOS 应用,类似于 Pocket 应用。在应用程序中,我有一个共享扩展,基本上只是将 url 保存到基于应用程序组的 NSUserDefaults 中。由于某种原因,共享扩展会导致移动 Safari 在选择共享扩展后挂起(无响应)。共享扩展的代码非常简单,我想知道可能是什么原因造成的。在 Xcode 中调试时,似乎根本没有调用共享扩展中的函数。有什么线索吗?这是在 iOS 9.3 上运行的。

代码如下:

//
//  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)
                    }


                }
            }
        }


    }


}

【问题讨论】:

    标签: swift mobile-safari ios8-share-extension


    【解决方案1】:

    好的,显然代码中存在崩溃,从而导致 Safari 冻结。在 Xcode 中调试扩展时,我发现了问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多