Ios 斯威夫特股票延期交易失败
我有一个用Swift写的iOS共享扩展 这是我与Swift的第一次会面,我对在行动完成前完成股票延期交易有疑问。此共享扩展将音频文件上载到API。音频文件在发送到服务器之前必须是base64。它似乎适用于小于30秒左右的音频文件,但一旦它们变大,共享扩展就会关闭代码,并且永远不会运行 代码如下: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
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,您找到任何解决方案了吗,我也面临同样的问题。