小编FE_*_*ech的帖子

NSPersistentCloudKitContainer:如何检查数据是否同步到 CloudKit

我已实现NSPersistentCloudKitContainer将我的数据同步到CloudKit,我想知道同步已完成并且没有其他待同步的更改。

当我尝试重新安装该应用程序时,我开始从 CloudKit 取回我的数据并开始在控制台中打印某些日志。从 CloudKit 取回所有数据大约需要 30 秒。一些日志提到了NSCloudKitMirroringDelegate. 看起来NSCloudKitMirroringDelegate知道剩余的同步请求,但我找不到任何关于确保同步完成的信息。

这里有一些日志确实表明 NSCloudKitMirroringDelegate 知道同步何时完成。

CoreData: CloudKit: CoreData+CloudKit: -NSCloudKitMirroringDelegate checkAndExecuteNextRequest::检查待处理的请求。

CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate _enqueueRequest:]_block_invoke(714): : 入队请求: A2BB21B3-BD1B-4500-865C-6C848D67081D

CoreData:CloudKit:CoreData+CloudKit:-[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(2085)::推迟额外的工作。还有一个活动请求:A3E1D4A4-2BDE-4E6A-8DB4-54C96BA0579E

CoreData: CloudKit: CoreData+CloudKit: -[NSCloudKitMirroringDelegate checkAndExecuteNextRequest]_block_invoke(2092): :没有更多的请求要执行。

有什么办法可以知道数据完全同步了吗?我需要向用户显示某些 UI。

core-data cloudkit ios13 nspersistentcloudkitcontainer

19
推荐指数
1
解决办法
1690
查看次数

NSPersistentStoreRemoteChangeNotification 没有被解雇

我正在尝试在我的 CoreData+CloudKit 项目中执行历史跟踪,该项目使用NSPersistentCloudKitContainer. 我一直在关注 Apple 的示例项目

我想在远程存储更新后执行某些任务。为此,苹果建议在应用程序的签名和功能的后台模式部分启用远程通知。

我已经为我的项目启用了历史跟踪,如 Apple 的示例项目所示。

    // turn on persistent history tracking
    let description = container.persistentStoreDescriptions.first
    description?.setOption(true as NSNumber,
                           forKey: NSPersistentHistoryTrackingKey)

    // ...
Run Code Online (Sandbox Code Playgroud)

我还注册了我的商店来监听商店的变化。

    // turn on remote change notifications
    let remoteChangeKey = "NSPersistentStoreRemoteChangeNotificationOptionKey"
    description?.setOption(true as NSNumber,
                               forKey: remoteChangeKey)

    // ...
Run Code Online (Sandbox Code Playgroud)

还添加了观察者来侦听NSPersistentStoreRemoteChangeNotification.

然而,没有NSPersistentStoreRemoteChangeNotification被解雇。为了确保我的实现没有错误,我只是在@objc func storeRemoteChange(_ notification: Notification)Apple 提供的示例代码中放置了断点,但我仍然看不到任何通知被触发并且没有断点被激活。

我已经了解示例项目中完成的标签重复数据删除,也尝试对其进行测试,但没有任何成功。这是 Apple 实现中的错误还是我缺少任何必需的设置?

core-data cloudkit ios13 nspersistentcloudkitcontainer

12
推荐指数
2
解决办法
2545
查看次数

DiffableDataSource:快照不会重新加载页眉和页脚

我正在使用UICollectionViewDiffableDataSourceforUICollectionView在多个部分中显示内容。

我正在使用在 WWDC'19 上引入的Collection View Compositional Layout 和 Diffable Datasources链接来呈现的多节布局UICollectionView

我有一个简单的设置,每个部分的页眉显示该部分中的项目数,页脚显示该部分所有项目的摘要。

section 1 Header --> January 2020 - 5 Trips
section 1 item 1 --> Trip 1
section 1 item 2 --> Trip 2
section 1 item 3 --> Trip 3
section 1 item 4 --> Trip 4
section 1 item 5 --> 行程 5

现在如果行程被删除,DiffableDataSource 会通过动画更新更改,但不会重新加载各部分的标题。这看起来不一致。例如,如果行程 4 被删除,则标题仍显示该部分中有 5 个行程。我怎样才能用 DiffableDataSource 重新加载标头?

对于临时修复,我只是collectionView.reloadData()在显示 Diffing 动画的延迟后调用 ,然后我硬重新加载数据,这也强制重新加载标头。

private func configureTripDataSource(){
    tripDataSource …
Run Code Online (Sandbox Code Playgroud)

ios uicollectionview uicollectionviewlayout swift diffabledatasource

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

在 iOS 13 中覆盖 traitCollection

在我的初始视图控制器中,我有一个UITabbarController作为子视图控制器。

我想必须使用具有 Compact 的水平尺寸类的 traitCollectionUITabbarController显示它UITabbar,以便在选项卡栏中,图像和标题显示为垂直对齐而不是并排。

iOS13 现在不支持覆盖 UITabbarController 的 traitCollection getter,Xcode 给出以下警告。

        override var traitCollection: UITraitCollection{
            let current = super.traitCollection
            let compact = UITraitCollection(horizontalSizeClass: .compact)
            return UITraitCollection(traitsFrom: [current, compact])
        }
Run Code Online (Sandbox Code Playgroud)

MyTabbarController 类覆盖了不支持的 -traitCollection getter。如果您尝试覆盖特征,则必须使用适当的 API。

在研究了合适的 API 后,我发现

open func setOverrideTraitCollection(_ collection: UITraitCollection?, forChild childViewController: UIViewController)
Run Code Online (Sandbox Code Playgroud)

实现这个之后,我可以覆盖 myTabbarController 的特征集合,但只有在视图改变方向之后。此 API 仅在我将 viewWillTransition 覆盖为方法时才有效。

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
        super.viewWillTransition(to: size, with: coordinator)
        let currentTC = traitCollection
        let compactTC = UITraitCollection(horizontalSizeClass: …
Run Code Online (Sandbox Code Playgroud)

uitabbarcontroller ios swift uitraitcollection

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

如何获得类似于苹果地图状态栏的模糊效果?

我正在开发基于地图的 iOS 11 应用程序,并希望使状态栏变得完全像 Apple 地图中显示的那样模糊。

这是它在地图应用程序上的外观: 在此处输入图片说明

目前,我正在使用 UIVisualEffectView 来复制这种效果。这是我的代码:

let blurEffect = UIBlurEffect(style: .regular)
blurredStatusBar = UIVisualEffectView(effect: blurEffect)
blurredStatusBar?.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(blurredStatusBar!)
Run Code Online (Sandbox Code Playgroud)

但是,无论我使用什么 UIBlurEffect,我都无法像 Maps 应用程序那样复制效果。以下是它如何寻找不同的效果:

。常规的 在此处输入图片说明

。著名的 在此处输入图片说明

。光 在此处输入图片说明

.extraLight 在此处输入图片说明

我只想模糊状态栏,而不添加任何饱和度、活力或任何白色色调。

有一个实例属性 - backgroundFilters,它可能对我有帮助,但不幸的是它不适用于 iOS 上的图层。

这里建议的一种可能的解决方案是捕获图像内的 UIView 内容,然后模糊并显示它。但是,在我的情况下,这不是一个可行的解决方案,因为我在状态栏下方有一张可以平移的地图。在平移地图时将下方地图连续捕获为图像并对其进行模糊处理是没有意义的。

我尝试使用ILTranslucentView,它是 UIView 的一个小子类,提供原生 iOS 7+ 模糊(半透明)效果。它是这样出现的:

在此处输入图片说明

我尝试了不同的方法,如这个,但没有用。

ios swift uiblureffect gaussianblur

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

覆盖 UIView 的 UITraitCollection

我有一个UITabBar必须有一个具有紧凑水平尺寸类的 traitCollection。因为在常规的 horizo​​ntalSizeClass 上,UITabBar并排呈现 TabBarIcon 和 Title。

我做了子类UITabBar并覆盖了 traitCollection getter 来给我修改后的 traitCollection。

override var traitCollection: UITraitCollection{
    let current = super.traitCollection
    let compact = UITraitCollection(horizontalSizeClass: .compact)
    return UITraitCollection(traitsFrom: [current, compact])
}
Run Code Online (Sandbox Code Playgroud)

这可以完成工作,但是,我开始低于警告

MyTabBar 类覆盖了不支持的 -traitCollection getter。如果您尝试覆盖特征,则必须使用适当的 API。

在查看 Apple 文档后,我确实找到了一个 API,overrideTraitCollection(forChild:) 但是保存我的 UITabBar 的 viewController 需要有常规的 horizo​​ntalSizeClass。

我也发现了一个类似的问题,但它没有回答我覆盖 a 的 traitCollection 的问题UIView

我不希望覆盖的的traitCollectionUIViewController但只有UIView

覆盖 a 的 traitCollection 的正确方法是UIView什么?

uitabbar ios swift uitraitcollection

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

UIFont:如何使用文体替代字符?

在我的应用程序中,我想stylistic alternate font 用于 'a' 而不是system font.

附件screenshot解释了字体的不同呈现。

在此处输入图片说明

我怎样才能启用这种行为UILabelUITextView以便它呈现正确的一层'a'?

我确实找到了一个YouTube video 链接,它完全解释了这一点,但他正在使用 acustom font并且它是硬编码的。我只想使用system font但与这个替代字符。

我也许可以硬编码UILabelcustom character,我不知道,因为我想用System font。我不想使用custom Font. 什么UITextView是编辑?我们如何让它a在用户输入时使用替代?

typography uifont ios swift

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