小编cop*_*ing的帖子

iOS15:NSPersistentCloudKitContainer:如何取消共享对象?

我\xe2\x80\x99m 正在开发一个应用程序,该应用程序使用 iOS 15 中的新共享支持NSPersistentCloudKitContainer。我没有找到一种方法来告诉 Core Data 一个对象或一组对象不再共享。

\n

例如,如果我创建一组对象然后调用share(_:to:completion:),则这些对象将按预期正确共享并移动到新的自定义CKRecordZone

\n

现在,如果用户停止使用 共享对象UICloudSharingController,则CKShareCore Data 创建的对象会从 CloudKit 中正确删除,但对象仍位于自定义区域中,并且 Core Data 仍具有与这些对象关联的原始对象CKShare。因此,当我致电 时fetchShares(matching:),我仍然得到CKShare,但当然,这不再有效。过去,使用我自己的代码,我\xe2\x80\x99d 使用UISharingControllers delegate 来获取用户停止共享的通知,然后更新我的模型。但似乎没有办法告诉 Core Data 有关更改的信息。

\n

通过将应用程序移至后台然后前台,或停止应用程序并重新启动来强制 Core Data 获取 CloudKit 更改不会导致 Core Data 注意到共享的更改。

\n

有谁知道如何告诉 Core Data 这些对象不再共享?

\n

core-data ios cloudkit

11
推荐指数
1
解决办法
889
查看次数

iOS 13 的presentationControllerDidDismiss() 在紧凑环境中不调用Popover

我正在为 iOS 13 的新“卡片式”模式视图更新我的应用程序。使用UIAdaptivePresentationControllerDelegate'spresentationControllerDidAttemptToDismiss()presentationControllerDidDismiss()函数,一切都运行良好。但是,对于他们的意见.modalPresentationStyle设置为.popoverpresentationControllerDidDismiss()在紧凑的环境中(如分离式或滑盖通过电话或iPad)被提出时,不叫。在常规尺寸类环境(例如 iPad 全屏)中呈现时,它会被正确调用。

我的代码设置非常简单:

呈现弹出框的代码:

func showChooser() {
    // other setup code...
    navController.modalPresentationStyle = .popover
    navController.popoverPresentationController?.barButtonItem = self.viewController?.navigationItem.leftBarButtonItem
    self.present(navController, animated: true)
}
Run Code Online (Sandbox Code Playgroud)

然后,呈现的控制器符合UIAdaptivePresentationControllerDelegate并设置:

// This is in the presented view controller (i.e. the popover)
override func viewDidLoad() {
    // other setup removed for brevity…
    self.navigationController?.presentationController?.delegate = self
}

func presentationControllerDidDismiss(_ presentationController: UIPresentationController) {
    print("did dismiss")
    self.cancel?()
}
Run Code Online (Sandbox Code Playgroud)

当视图在常规大小类环境中呈现时,它会正确显示为弹出框。当用户在弹出框外点击时, thenpresentationControllerDidDismiss()被调用。但是,当相同的代码出现在紧凑的环境中时,它会正确显示(作为卡片样式),但是当用户向下拖动视图时,presentationControllerDidDismiss()不会被调用。 …

uiviewcontroller uikit ios swift ios13

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

如何调试慢速Swift编译时间

我有一个Swift SpriteKit项目,包含大约25个小文件.编译这个项目的时间是30-45秒!它是纯粹的Swift,没有ObjC.

我在Report Navigator中观察了编译,试图找到一个花时间的文件.但是,它不是一个单独的文件.它始终是列表中的最后一个文件,似乎总是占用.但是这个文件在编译之间可能会有所不同,但仍然需要花费很多时间.

在最后一个文件之后的步骤是Merge xxx.swiftmodule,这很快就会发生,但是我不确定是否因为它在它可能相关的缓慢之后出现.

我搜索并尝试了各种方法来找到罪魁祸首.我看了这篇文章:为什么Swift编译时间这么慢?并尝试了这些方法.我使用CTRL-来完成了命令行构建,但是没有显示有关缓慢的任何有用信息.

我已经完成了我的项目,寻找类型推断可能会被绊倒的地方,但是没有找到太多(实际上,如果是这种情况,我希望单个文件成为罪魁祸首).

有没有人有任何其他建议来追踪这个?来自几乎立即编译的Objective-C项目,这让我发疯.

编辑我对此进行了更多的工作,包括构建输出的屏幕截图,注意到缓慢发生的位置.问题是,如果我在缓慢的文件中注释掉的代码,那么该文件之前,在列表中就变成了一个缓慢的(它被罚款之前).如果我将该代码注释掉,那么那之前的代码就会变慢,等等.

构建输出

compilation ios swift

5
推荐指数
2
解决办法
1926
查看次数

标签 统计

ios ×3

swift ×2

cloudkit ×1

compilation ×1

core-data ×1

ios13 ×1

uikit ×1

uiviewcontroller ×1