尝试将离线 HLS(ios 10 的一项新功能)添加到应用程序。我正在快速尝试以下操作,以便应用程序在没有离线 HLS 功能的情况下仍能在 ios 9 上运行。在 ios10 上运行良好,也可以为 ios9 编译。
@available(iOS 10.0, *)
@objc class DownloadManager: NSObject, AVAssetDownloadDelegate {
//Do stuff with downloading assets
}
Run Code Online (Sandbox Code Playgroud)
但是,当我在 ios 9 设备上实际运行它时,应用程序立即崩溃并显示以下消息:
dyld:未找到符号:_OBJC_CLASS_$_AVAssetDownloadTask 引用自:/var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod 预期在:/Systemworks/FoundaryFrame /var/mobile/Containers/Bundle/Application/7062C410-C4F5-4270-9F1E-22750E99F799/wod.app/wod中的框架/AVFoundation
我已将与此相关的所有代码都限制在 DownloadManager 类中,所以我不知道下一步该做什么。谢谢!
我刚拿到了iPhone SDK 4,而我正试图开发一个我之前正在开发的应用程序.所以我实现了两个
-(void)applicationDidEnterBackground:(UIApplication *)application
和- (void)applicationWillTerminate:(UIApplication *)application
当我单击模拟器4.0中的主页按钮时,它似乎工作正常.应用程序调用 -(void)applicationDidEnterBackground:(UIApplication *)application并进入后台状态..
但是,我然后双击主页按钮以显示在后台运行的应用程序,并按住它以显示减号或退出.当我点击减号时,调试器说
节目收到信号:"SIGKILL"
此外,- (void)applicationWillTerminate:(UIApplication *)application永远不会被称为.我错过了我需要做的事情才能在OS4上工作吗?或者至少可以有人指出我调试SIGKILL的方法.谢谢.
在 iOS 10 中,Apple 添加了离线 HLS。在文档中,他们提到:
重要提示:下载的 HLS 资产以私有包格式存储在磁盘上。此捆绑包格式可能会随着时间的推移而改变,开发人员不应尝试直接访问或存储捆绑包中的文件,而应使用 AVFoundation 和其他 iOS API 与下载的资产进行交互。
似乎对有关这些文件的信息的访问受到限制。我正在尝试查找存储文件的大小。这就是我所做的。下载完成后,我保存相对路径
func urlSession(_ session: URLSession, assetDownloadTask: AVAssetDownloadTask, didFinishDownloadingTo location: URL) {
//Save path
video?.downloadPath = location.relativePath
}
Run Code Online (Sandbox Code Playgroud)
后来我重建文件路径如下
if let assetPath = workout.downloadPath {
let baseURL = URL(fileURLWithPath: NSHomeDirectory())
let assetURL = baseURL.appendingPathComponent(assetPath)
Run Code Online (Sandbox Code Playgroud)
这有效:
try FileManager.default.removeItem(at: assetURL)
Run Code Online (Sandbox Code Playgroud)
这不会并返回文件不存在的错误:
let att = try FileManager.default.attributesOfItem(atPath: assetURL.absoluteString)
Run Code Online (Sandbox Code Playgroud)
我可以按如下方式加载视频资产并使用以下命令离线播放:
let avAsset = AVURLAsset(url: assetURL)
Run Code Online (Sandbox Code Playgroud)
但这会返回一个空数组:
let tracks = avAsset.tracks(withMediaType: AVMediaTypeVideo)
Run Code Online (Sandbox Code Playgroud)
再一次,我只是想获取离线 HLS 资产的文件大小。看来 SO 上使用 FileManager 获取文件大小的其他答案不适用于这些,也不适用于获取加载的 AVAsset 大小的答案。提前致谢。
我似乎无法找到任何关于此的文档.可以在文件名中使用的字符数量是否有限制和/或是否对iPhone应用程序保存的文件名中可以使用的字符有限制?谢谢.
如WWDC所述,iOS 11应该支持索引核心数据,以便可以通过Spotlight对其进行搜索。这是WWDC的演示文稿:
但是,在观看视频并查看文档之后,我仍然不知道如何设置我的核心数据对象,以便可以从手机的聚光灯搜索中搜索它们。
我猜主要问题是:
1.)您实际上如何设置可以搜索特定对象类型的哪些属性。
2.)如何设置NSCoreDataCoreSpotlightDelegate并获取它来处理数据?看起来NSPersistentStore有一个属性
var coreSpotlightExporter:NSCoreDataCoreSpotlightDelegate
但这只准备好了:(
我找不到任何可以清楚地解释这些内容的内容。谢谢!
您好我在iPad应用程序中使用以下NSFileManager方法:
- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)
获取文件属性,然后使用密钥NSFileModificationDate获取最新的文件修改日期/时间.但是,它返回给我的日期/时间比我实际保存文件的日期早了5个小时,这是我在查看文件属性时在"Finder"中看到的内容.
我知道一个解决方法/黑客会在我回来的时候敲5个小时,但我想知道为什么会这样.有人知道吗?谢谢.