小编Hua*_*ham的帖子

对象库在Xcode 10中的位置是什么?

在Xcode 10中,对象库在哪里显示视图和控制器对象,代码片段和介质曾经出现在Xcode 9及更旧版本的右下角?

Xcode 9:

Xcode项目窗口显示对象库

Xcode 10:

Xcode项目窗口显示与Xcode 9窗口相同的空间,为空

user-interface xcode xcode10

180
推荐指数
5
解决办法
5万
查看次数

统一日志记录:应用程序的信息/调试消息永远不会显示在Logarchive文件中

将应用程序部署到我的iOS设备,通过sysdiagnose触发日志收集,然后浏览system_logs.logarchive从iTunes同步获取的日志消息时,我的应用程序从未显示过Info/Debug日志消息类型.

请注意,这个问题不同于现有但类似的问题

我正在使用Apple的 Paper Company(Swift)示例代码来说明我的问题.我开始将应用程序部署到运行iOS 11.0.3的iOS设备上.该方案使用调试模式.就我而言:

  • 我总是在控制台中有"包含信息消息"和"包含调试消息".
  • 当我的应用程序运行连接到Xcode时,我实时流式传输我的日志消息,我继续在控制台上看到所有日志消息,包括信息和调试类型.
  • 但是,当我通过sysdiagnose触发日志收集并通过logarchiveConsole 读取文件时,我从未看到我的应用程序的Info和Debug消息.其他消息类型,默认,错误和故障,继续显示,就像我在直播时一样.
    • 但是,我仍然可以看到属于其他系统进程的Info和Debug消息,但不是我应用程序的进程.

现场直播. 显示了信息/调试 现场直播. 活动追踪工作 Logarchive. 我的应用没有信息/调试 Logarchive. 没有活动追踪 Logarchive. 其他进程显示的信息/调试

由于这种令人费解的行为,我开始认为它可能与系统的配置有关.在记录文档中:

信息级消息最初存储在内存缓冲区中.如果没有配置更改,它们不会移动到数据存储,并在内存缓冲区填充时被清除.但是,当出现故障和可选的错误时,它们会在数据存储中捕获.将信息级别的消息添加到数据存储时,它们将保留在那里,直到超过存储配额,此时将清除最早的消息.使用此级别来捕获可能有用的信息,但对于排除错误不是必需的信息.

在阅读之后,我还尝试将Error类型更改为Fault类型,只是为了验证Info类型消息是否会显示.

os_log("B-b-b-b-b-b-b-bomb !", log: ViewController.ui_log, type: .fault)  // previously .error
Run Code Online (Sandbox Code Playgroud)

但是,我仍然没有在logarchive文件中看到任何信息日志消息.

我的问题:

  • 我是否遗漏了一些我需要设置的内容,以使sysdiagnose的日志记录行为与我在实时流式传输时看到的控制台输出匹配?请注意,Paper Company(Swift)已经使用了ASSETCATALOG_COMPRESSIONBuild Settings,因为已经指出了os_log按预期工作的重要性.请参阅使用新的swift os_log api读取日志
  • 这是配置文件的问题吗?为了查看Info/Debug消息logarchive,我是否真的需要添加一个自定义配置文件,如Apple的Logging doc和mobleconfig示例中所示?然而,看起来很可疑,即使使用Fault类型,Info消息仍然不会被记录,并且我仍然可以看到来自其他进程的Info/Debug消息.

console xcode logging ios unified-log

14
推荐指数
1
解决办法
653
查看次数

GLSL上的鲁棒atan(y,x)用于将XY坐标转换为角度

在GLSL(特别是我正在使用的3.00)中,有两个版本 atan():atan(y_over_x)只能返回-PI/2,PI/2之间的角度,同时atan(y/x)可以考虑所有4个象限,因此角度范围涵盖-PI, PI,就像atan2()在C++中一样.

我想用第二个atan将XY坐标转换为角度.但是,atan()在GLSL中,除了不能处理的时候x = 0,还不是很稳定.特别是在x接近零的地方,除法会溢出,导致相反的结果角度(你得到的东西接近-PI/2,你可以得到大约PI/2).

什么是一个好的,简单的实现,我们可以在GLSL之上构建,atan(y,x)使其更强大?

c++ glsl coordinates atan2 numerical-stability

13
推荐指数
4
解决办法
7660
查看次数

使用"复制到应用程序"导入文件时,缩略图元数据消失

我一直在使用URL Resources将缩略图元数据嵌入到我的自定义基于文档的文件中.当我导出自定义文档文件时,在iOS文件应用程序中浏览时,缩略图会很好地显示.

override func fileAttributesToWrite(to url: URL, for saveOperation: UIDocumentSaveOperation) throws -> [AnyHashable : Any] {
    var attr: [AnyHashable : Any] = [URLResourceKey.hasHiddenExtensionKey: true]

    // Ignore the proper resizing for now.
    ...

    attr[URLResourceKey.thumbnailDictionaryKey] = [
        URLThumbnailDictionaryItem.NSThumbnail1024x1024SizeKey: #imageLiteral(resourceName: "Star")
    ]

    return attr
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 (图标来源:使用你的面包)

但是,当我使用"共享"操作将文件导回到我的应用程序时,除缩略图外Copy to <MyApp>,所有元数据似乎都存在.

在此输入图像描述

func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

    // Other non-image metadata survives, like creationDate.
    if let creationDateOpt = try? url.resourceValues(forKeys: …
Run Code Online (Sandbox Code Playgroud)

url metadata thumbnails ios uidocument

13
推荐指数
0
解决办法
258
查看次数

iOS 11上的UIDocument创建:不允许读者访问该URL

从iOS 11开始,每次使用UIDocumentAPI 创建新文档时都会遇到以下错误:

[错误]无法获取项目/var/mobile/Containers/Data/Application/XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX/Documents/myDoc-XXXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXX.myFile(n)的属性值.

错误:错误域= NSFileProviderInternalErrorDomain代码= 1
"不允许读者访问该URL."
UserInfo = {NSLocalizedDescription =不允许读者访问该URL.}

不同于类似的问题(1,2,3上SO)在此,我没有使用UIDocumentBrowserViewController.我只是创建一个UIDocument并自己调用save()Documents目录.我发现的最接近的问题用途UIManagedDocument.但是,就我而言,尽管出现错误消息,仍然可以成功创建和写入文件.

这是我保存例程的要点:

@IBAction func createDoc(_ sender: Any) {
    let uuid = UUID().uuidString
    let doc = Document(baseName: "myDoc-\(uuid)")
    doc.save(to: doc.fileURL, for: .forCreating) { (completed) in
        if (completed) {
            doc.close(completionHandler: nil)
            self.verifyNumberOfFiles()
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

UIDocument为了简化这个问题,我的子类也几乎是空白的:

class Document: UIDocument {    

    let fileExtension = "myFile"

    override …
Run Code Online (Sandbox Code Playgroud)

document-based uti ios uidocument ios11

12
推荐指数
1
解决办法
2069
查看次数

字符串格式化程序,用于Swift中的字符串常量?

很抱歉,如果这是重复的,但我尝试搜索包括Apple的字符串格式说明符IEEE printf规范,但找不到这个简单的答案的答案.

我想打印带字符串格式化程序的os_log消息,用于字符串常量.类似于:

printf("Currently at processing state: %s\n", "reading in");
Run Code Online (Sandbox Code Playgroud)

在C.但是,当我在Swift中尝试这样的事情时:

os_log("Currently at processing state: %s", log: .default, type: .info, "reading in")
Run Code Online (Sandbox Code Playgroud)

它根本没有印刷任何东西.

如何使用字符串格式说明符打印字符串常量?我不知道如何做到这一点NSLog.

编辑:os_log需要StaticString,所以它不能这样做"Something \(Expr) Something else"print().您仍然可以使用字符串格式来打印数字变量.我想知道在这种情况下如何打印字符串常量/变量.

编辑2:Apple实际上已经在其手册页面上讨论了这个主题,我设法错过了它,但它现在只在Objective-C API版本中讨论过.

string logging constants format-specifiers swift

9
推荐指数
1
解决办法
3387
查看次数

Swift中的预期模式错误?

我一直在关注斯威夫特应用教程苹果公司创建这里.具体来说,我正在尝试设置一些自定义按钮来创建评级控件.按钮有三个与之关联的图像:emptyStar,filledStar和highlightStar,用于按钮的不同状态.

我完全按照Apple提供的代码使用代码,但我不知道为什么我得到了这个编译时出现的神秘错误Expected pattern,如截图所示: 预期的模式错误 图像资产

我在这做错了什么?

compile-time ios swift

8
推荐指数
1
解决办法
5925
查看次数

特征库:在函数中返回矩阵块作为左值

我试图返回一个矩阵块作为函数的左值.假设我的函数看起来像这样:

Block<Derived> getBlock(MatrixXd & m, int i, int j, int row, int column)
{
    return m.block(i,j,row,column);
}
Run Code Online (Sandbox Code Playgroud)

事实证明,似乎C++编译器的理解是块()算子仅给出临时值等返回它作为一个左值是由编译器禁止.然而,本征文档中有一些例子,我们可以使用本征作为左值(http://eigen.tuxfamily.org/dox/TutorialBlockOperations.html#TutorialBlockOperationsUsing),所以我想知道我们怎么也做相同的功能返回.

a.block(0,0,2,3) = a.block(2,1,2,3);
Run Code Online (Sandbox Code Playgroud)

谢谢!

reference function block lvalue eigen

6
推荐指数
1
解决办法
3879
查看次数

在单元测试中,表格视图的cellForRow(at :)为nil。

在单元测试中,我有一个简单的表视图,其中包含一堆基本单元格(仅带有标签的单元格)。我想使用来访问单元格cellForRow(at:),因此我可以通过编程方式测试选择和取消选择行等内容,但是此cellForRow查询始终返回nil

网上有一些讨论,我应该改用数据源tableView(_, cellForRowAt:)。这不是我的意图。我只想测试单元的可见性,测试选择和取消选择它们。要测试可见性,cellForRow(at:)是要使用的正确功能。此外,数据源tableView(_, cellForRowAt:)没有超出范围索引访问的保障,而在这种情况下,表视图cellForRow(at:)将正常返回nil,我也想在上面测试我的表视图控制器。

然而,尽管我总可以从得到一个有效的单元格tableViewController.tableView(_:cellForRowAt:),我不明白为什么我总是niltableView.cellForRow(at:)。我已经验证了tableViewtableViewController都不nil在我的单元测试中,并且还通过以下方式触发了视图加载:

_ = tableViewController.view
Run Code Online (Sandbox Code Playgroud)

在中setUp()。我也用进行了验证tableView.indexPathsForVisibleRows,结果中确实包含我用于的索引路径cellForRow(at:)

当我通过LLDB和断点查询单元时,有时我的单元会正确显示。我是否可能会丢失异步等待之类的东西,因为可视化加载单元可能是在其他线程中完成的?我是否应该添加某种期望等待,以便等到单元格完全加载后才能使用进行访问cellForRow(at:),即使tableView.indexPathsForVisibleRows已经返回了预期的索引路径也是如此。我尝试进行设置,但不确定如何覆盖表视图控制器的init()

这是我在单元测试类中的代码。

import XCTest
@testable import TableViewTest
class TableViewTestTests: XCTestCase {
   
    private var appDelegate: AppDelegate!
    private var tableVC: TableViewController!
   
    override func setUp() {
        super.setUp()
        
        appDelegate …
Run Code Online (Sandbox Code Playgroud)

unit-testing uitableview tableviewcell xctest swift

5
推荐指数
0
解决办法
1077
查看次数

在iOS应用沙箱上获取本地文件的NSMetadataItem

我知道在iOS上,您只能使用NSMetadataQueryiCloud文件。但是,根据Apple的指南,仍然可以NSMetadataItem通过使用以下命令手动搜索所需的文件来获得FileWrapper

iOS允许在iCloud中搜索元数据以查找与文件相对应的文件。它仅提供用于文件元数据查询NSMetadataQuery和的Objective-C界面,并且NSMetadataItem仅支持搜索iCloud的搜索范围。

与台式机不同,无法使用元数据类搜索iOS应用程序的沙箱。为了搜索应用程序的沙箱,您将需要使用NSFileManager该类以递归方式遍历沙箱文件系统中的文件。找到匹配的文件后,您可以按照所需的方式访问该文件。您还可以使用NSMedatataItem该类来检索该特定文件的元数据。

但是,我找不到NSMetadataItem从iOS沙箱上的本地文件获取的方法。您可以NSMetadataItem从文件URL 初始化,但这仅在macOS上可用。FileManager似乎也没有NSMetadataItem要从中检索的API 。

如何NSMetadataItem在iOS应用沙箱上获取本地文件?

metadata sandbox foundation nsfilemanager nsmetadataquery

5
推荐指数
1
解决办法
201
查看次数