Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 斯威夫特股票延期交易失败_Ios_Swift_Share Extension - Fatal编程技术网

Ios 斯威夫特股票延期交易失败

Ios 斯威夫特股票延期交易失败,ios,swift,share-extension,Ios,Swift,Share Extension,我有一个用Swift写的iOS共享扩展 这是我与Swift的第一次会面,我对在行动完成前完成股票延期交易有疑问。此共享扩展将音频文件上载到API。音频文件在发送到服务器之前必须是base64。它似乎适用于小于30秒左右的音频文件,但一旦它们变大,共享扩展就会关闭代码,并且永远不会运行 代码如下: override func didSelectPost() { let defaults = NSUserDefaults(suiteName: suiteName) var a

我有一个用Swift写的iOS共享扩展

这是我与Swift的第一次会面,我对在行动完成前完成股票延期交易有疑问。此共享扩展将音频文件上载到API。音频文件在发送到服务器之前必须是base64。它似乎适用于小于30秒左右的音频文件,但一旦它们变大,共享扩展就会关闭代码,并且永远不会运行

代码如下:

    override func didSelectPost() {
    let defaults = NSUserDefaults(suiteName: suiteName)
    var authorization: String? = defaults!.stringForKey("Authorization")
    authorization = authorization!.stringByReplacingOccurrencesOfString("\"", withString: "", options: NSStringCompareOptions.LiteralSearch, range: nil)

    if let content = extensionContext!.inputItems[0] as? NSExtensionItem {
        let contentType = kUTTypeAudio as String

        if let contents = content.attachments as? [NSItemProvider] {
            for attachment in contents {
                attachment.loadItemForTypeIdentifier(contentType, options: nil) { data, error in
                    let url = data as! NSURL

                    do {

                        let audioData = try NSData(contentsOfURL: url, options: NSDataReadingOptions())
                        let base64Audio = audioData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0))
                        print(base64Audio)


                        let sessionConfig = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier(self.suiteNameSessionConfig)
                        // Extensions aren't allowed their own cache disk space. Need to share with application
                        sessionConfig.sharedContainerIdentifier = self.suiteName
                        let session = NSURLSession(configuration: sessionConfig)

                        let url = NSURL(string: "https://api.example.com/upload")
                        let request = NSMutableURLRequest(URL: url!)
                        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
                        request.setValue("application/json", forHTTPHeaderField: "Accept")
                        request.setValue(authorization!, forHTTPHeaderField: "Authorization")

                        request.HTTPMethod = "POST"

                        let jsonObject:[String: AnyObject] = [ "recording": [ "file": "data:audio/x-m4a;base64," + base64Audio] ]


                        var jsonError: NSError?
                        do {
                            let jsonData = try NSJSONSerialization.dataWithJSONObject(jsonObject, options:[])
                            request.HTTPBody = jsonData
                        } catch {
                            request.HTTPBody = nil
                        }


                        let task = session.dataTaskWithRequest(request)
                        task.resume()


                        self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
                    } catch {
                        print(error)
                        self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
                    }
                }
            }

        } else {
            self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
        }
    } else {
        self.extensionContext!.completeRequestReturningItems([], completionHandler: nil)
    }
}

据我所知,在一个扩展中允许使用多少RAM有严格的限制。也许,尝试使用压缩级别和/或不同的音频API,这些API可能在不存储超过几秒的内存的情况下传输音频。请注意,RAM限制可能是设备硬件RAM的一个百分比,因此请在较低规格/较旧的设备上进行测试。Hello@Kyle,您找到任何解决方案了吗,我也面临同样的问题。