Tag: 错误

iOS 11上HEVC编码器的文件大小问题

有关此问题的原因,请参见下面的更新5! … iOS 11备受期待的功能之一是对HEVC(或H.265)编码视频的支持。 HEVC使文件大小从H.264减少了约50%,而不会降低质量。 新的编码器的初始印象在随附的相机应用程序中表现良好,但将视频编解码器设置为HEVC时,AVASsetWriter使用的编码器似乎存在问题。 要查看该问题,请在此处克隆或下载我的Git存储库。 另外,如果您有一个已经使用其他编解码器将帧写入视频的项目,只需将使用的AVVideoCodecKey替换为AVVideoCodecType.hevc(在较早版本的Swift上为AVVideoCodecHEVC),如下所示: 在比较使用HEVC编解码器与H.264进行输出的文件时,我已经看到,使用HEVC进行输出的文件的大小大约是使用H.264进行编码的文件的三倍,而质量似乎是相同的。 我已经向Apple提交了错误,并且在收到他们的来信后会更新此帖子,但是与此同时,如果您需要使用AVFoundation逐帧编写,我建议不要跳入使用HEVC。 更新:此问题在iOS 11.0.1中仍然存在-HEVC编码文件的文件大小仅是H.264编码文件的三倍多。 更新2:在iOS 11.0.2中仍未修复 更新3:在iOS 11.0.3中仍未修复 更新4:在iOS 11.2中仍未修复 更新5:根据Brad Ford的说法,问题是HEVC编码器的默认比特率(30兆位)比H.264编码器的默认高得多(5mit)。 尚不清楚这是为什么,并且从文档中看不出来,但是需要更多细节才能了解哪种比特率可以提供两种不同编码器可比的质量。

开始进行Swift编程第14部分-错误处理

在上一篇文章中,我们讨论了泛型。 开始Swift编程第13部分-泛型 以前,我们介绍了类型别名,属性观察器以及“自我vs自我”。 medium.com 这是很难获得的信息,但这就是我们练习的原因。 仅仅因为我写了这个系列来进行教学,并不意味着这足以让您掌握所教的一切。 您可能从我的一篇文章转到另一篇相关文章,但我不会反对您。 事实上,我鼓励您继续从不同的来源学习。 我感谢通过阅读和/或鼓掌阅读每篇文章的人们所表现出的忠诚度,但我的首要目标不是要获得人气。 这是为了确保当您完成我的一篇文章时,您学到了一些新知识。 无需赘言,我们开始。 您是否曾经去过厨房准备食物并意识到没有干净的盘子? 您有几种选择: A.放弃晚餐 B.到餐厅去,或者 C.洗碗,然后在家修理晚餐 这些决定不仅影响您,而且影响您所喂养的人们。 选项A是最简单的解决方案,但每个人都饿着肚子,看着你成为晚餐的救星。 选项B也很容易,但价格昂贵,需要做一些不必要的额外工作,而且味道并不总是像家庭自制菜那样好。 选项C是一条艰难的道路,但如果您希望自己的食物品尝到自己想要的口味而又少有抱怨,并且希望没有破损的菜肴,那它就是最好的解决方案。 那么,所有这些与错误处理有什么关系? 一切! 当您决定尝试晚餐时,您调用了一种方法。 那么我们如何抛出错误呢? 可以通过在函数声明中的参数之后附加throws来引发错误。 但是,如果我们想从抛出函数返回错误字符串怎么办? 我们有一个选择,我之前已经暗示过。 为我们提供了针对Apple的所有错误的localizedDescription ,但它不仅神奇地读取了文本fileOpenError并提出了“无法打开文件”文本。 我们必须告诉它要提供什么。

Swift控制台记录器

最后结果 : 几天前,我正在使用此记录器。 希望与您分享,因为最终结果非常简洁。 因此,首先您需要的是您的应用可能需要的日志类型。 在我的示例中,我几乎涵盖了我所知道的所有日志类型,尽管我很确定您只需要其中一半。 这是一个枚举,因此只需删除不需要的案例(或更改符号)。 它是这样的: 如果我们想获取文件名,函数名和行号,则必须在调用函数之前使用Swift的宏(#file,#function,#line),然后将其作为函数的参数发送。 从函数主体中调用这些宏将打印Logger 的文件,函数和行。 我们可以使用的一个小技巧是使用默认值声明参数。 这将获取调用者的值,我们将获得想要获得的结果。 这是Logger类: 这是如何使用它: Logger.log(.e,“ JSON解析失败”)Logger.log(.w,“我们没有烤面包粉!!”) 希望你喜欢。 🎵“快乐快乐,快乐快乐”🎵

使用Xcode 9工具查找运行时错误

可能的情况 1 –数据竞赛 在多个线程之间共享的任何可变数据都需要访问同步。 如果在共享的可变变量上缺少同步 ,则意味着您存在数据竞争。 在存在数据争用的情况下,我们的程序可能会发生内存损坏和崩溃。 这些问题适用于C语言,也适用于Swift代码。 因此,让我们看一下Swift中的示例。 在这种情况下,我们有一个名为EventLog的类,它仅具有一个简单的名为log的函数,该函数将一些文本消息输出到输出中。 但是它也跟踪哪个是调用该log方法的最后一个事件源。 它将信息保存到一个名为lastEventSource的存储属性中,该属性是一个可选变量,在开始时为nil,但是一旦有人调用log,就会使用该特定日志源完美填充该信息。 现在让我们说我们有两个线程都试图同时调用该log方法。 假设第一个线程是我们的网络子系统,并且记录了一些下载已完成。 当第二个线程(代表我们的数据库子系统)正在记录查询已完成时: 那是一场数据竞赛,因为我们正在同时访问相同的内存位置。 Thread Sanitizer将对此发出警告! 要解决此问题,我们需要引入同步,最简单的方法是使用串行调度队列。 现在,由于此队列是串行的,因此一次只能执行一个工作项。 因此,如果将log函数的主体包装到queue.async中,将提供正确的同步。 并请注意,我在这里使用async是因为我们不需要等待该函数完成,因为该函数不会提供任何结果,因此等待它是没有意义的。 因此,这不仅解决了该问题,而且还提高了性能,因为现在无论呼叫日志的人都不再需要等待此打印完成。 这样,整个类现在都是线程安全的,我们可以从多个线程调用log 。 由Grand Central Dispatch或GCD提供的Dispatch队列在Swift中很容易获得,它们应该是同步的首选。 即使还有其他提供同步的机制,GCD也非常轻巧,并且可以从Swift轻松使用。 提示:一个好主意是将数据与串行调度队列相关联,并且仅访问这些队列中的数据,这将确保您仅以同步方式使用数据。

斯威夫特与仙境

我如何解决图书馆未加载错误!! 我对快速编程完全陌生。 作为所有工程师,我有很多问题,可以花几个小时来解决一个错误或thing 昨天,我遇到一个问题,为什么当我尝试在模拟器上打开应用程序时为什么我的应用程序立即关闭。 您通常会看到,我使用应用程序调试模式。 对我问好! 然后,我必须找到这些崩溃日志的位置。 在android中,我很小的时候就使用genymotion,崩溃日志与模拟器保存在同一文件夹中。 是的,我尝试做同样的事情,但是,您知道答案。 崩溃日志保存在控制台应用程序内(在用户诊断报告下)! 是的,我不知道。 我是否曾告诉过您我同时使用Macbook和Swift? 我的应用程序因名为的错误而关闭的原因: Dyld错误消息: 库未加载:@ rpath / Alamofire.framework / Alamofire 引用自:/Users/USER/Library/Developer/CoreSimulator/Devices/0EE1CF0D-F221–445F-95BE-4E5FC55F5067/data/Containers/Bundle/Application/BE9DFC76–33E6–4892-B8A8-CA1EA469234C/KomutanLogar.app/KomutanLogar.app/KomutanLogar.app/ 原因:找不到图片 我确实在“链接的框架和库”下添加了Alamofire,在下面也有Facebook API库,但是它们没有引起任何问题。 因此,经过长时间的努力,我尝试在嵌入式库下添加Alamofire.framework,但这是行不通的。 在stackoverflow中,人们通过在嵌入式库下添加有问题的库来解决此问题,并且可以解决该问题。 但是,当我尝试做同样的事情时,它没有接受。 你好,幸运的我! 有人说“只要清理干净,然后重新建立伙伴!”,我就像是如何解决这样的问题! 来到这里,我告诉解决方案(至少它对我有用,是的,我绝望了): 我将alamofire添加为项目,只是在应用程序中复制了xcodeproj。 然后编译它。 当您单击嵌入式库中的+图标时,它为我提供了在alamofire项目中添加alamofire编译版本的选项。 我将添加图像。 这是我们心爱的alamofire 我在核心操作表选择器上执行了相同的方法,并且也可以使用。 太甜了,浪费了2个小时之后,解决方案需要2次点击。 呀!

iOS最喜欢的框架:使用R.swift的Typesafe

Android IDE在构建时自动生成一个R.java文件,该文件包含项目中每种资源类型的子类以及对其的静态引用。 例如,R.drawable.icon将是名为“ icon”的图像的ID。 在iOS中,我们不太幸运-加载资源文件需要我们指定其名称,例如:UIImage(named:“ icon”)。 这可能会导致一些问题: 不必要的强制转换-例如:使用标识符使可重用单元出队将导致UICollectionView类型的实例,但是在运行时,我们大多数情况下将有一个继承自UICollectionView的实例。 如果我们知道该单元格的标识符,那么我们就知道该单元格的类型。 由于错误的字符串标识符,导致运行时崩溃。 没有自动完成。 R.swift是一个模仿Android IDE R.java文件创建的框架:我们添加了一个在构建时生成R.swift文件的脚本。 该文件包含对项目中所有资源的静态引用,例如: 图片 字型 资源文件 色彩 本地化字符串 故事板 塞格斯 笔尖 可重复使用的细胞 因此,例如,看下面的行: 让图像:UIImage = UIImage(名称:“ imageName”)! 如果文件imageName不存在,它将崩溃(强制解开nil)。 相反,我们可以使用以下行: 让图像:UIImage = R.image.imageName()! 如果imageName文件更改了它的名称或从项目中删除了它,我们将收到一个编译错误! R.swift对我来说是必不可少的框架-没有它,我就不会开始一个项目! 我建议您转到它的GitHub存储库并检查文档中的其余示例。 快乐(安全)的编码🙂

[react native]错误:链接器命令失败,退出代码为1

纪录一下花一整天去找这个在RN专案在release ios的时候xcode的报错 linker command failed with exit code 1 主要是xcode -> General->Linked Frameworks and Libraries有重复的Library 初步podfile会加入一些RN的基础库,例如: libRCTText.a 可是这个情​​况下libRCTText.a有包含libRCTText.a的libReact.a xcode就会报错 把以下加到Podfile的最下面再一次pod install就可以解决此问题 post_install做|安装程序| installer.pods_project.targets.each做| target | 如果target.name ==“反应” target.remove_from_project 结束 结束 结束 此处在Pod install的最后发现react相关的库并删除,因此xcode不会因为重复引用而报错。

哦💩:启动应用程序时我遇到了一些明显的问题

以下是启动 我的最新iOS应用程序 Grease 的回忆 。 我一直在等待的电子邮件终于到来了…… 真棒! 🙌 最后,直播! 注意:出现在App Store搜索中实际上需要大约12–24小时,所以所有这些都在我找到它之后进行。 是时候从App Store下载并打开它了。 我像其他人一样去注册一个新帐户,并且…🤦‍♂️ 错误#1:在大尺寸手机上,注册用户界面看起来有些奇怪 没有什么比每个人都会看到的第二个屏幕上的UI故障更专业。 好吧,每个拥有Plus尺寸iPhone的人都包括我在内。 好吧,不是世界末日。 我开始一天的锻炼。 添加粗麻布作为练习。 做十个薄饼。 添加一组。 一切看起来都很好。 真棒! 核心功能似乎正常。 结帐我的成就,尚未获得任何成就。 一切看起来都不错。 我滚! 真是个好应用。 是时候结帐我的个人资料了! … 嗯,我的网络一定很慢,粉红色按钮的价格要花一点时间才能加载… [10秒后仍未加载] 好吧…呃…让我们看看如果我点击它会发生什么……️ 错误#2:未批准我的应用内购买 关于应用内购买的有趣事实:他们还需要进行审核。 我在Notes应用程序的深渊某处有个提醒,提醒您不要忘记这样做…🤷‍♂️ 我最初计划在发布本文时解决这些问题。 在我写这篇文章的前一天晚上,该应用程序进行了审查,所有内容都整理好了,但后来我也搞砸了。 😅 错误三:恐慌和取消应用程序审查 我目前正在向支持该应用程序的人添加深色主题作为功能。 一个问题:我不小心将其设置为默认主题…哦💩。 我很快进入iTunes Connect并取消了我正在审查的当前版本…确认微调器旋转时,我对自己想:“嘿,我什至没有完成主题功能。该死!” 是的,我只是取消了我的错误修复。 所以我重新提交了,回到了等待审查的状态。 在批准更新之前,您将无法支持该应用程序。 抱歉。 😛 (注意:1.0.1版已上线) 奖励错误:希望这些天没有人阅读应用程序的描述: 并不是很尴尬,因为它不是真正的应用程序功能,但是我想我应该在发布之前阅读过几次。 我相信随着时间的流逝,还会出现更多愚蠢的错误,但是到目前为止,我已经注意到了! 如果您想在不费吹灰之力的情况下变得更强壮,也许油脂可以帮助您。 […]