小编Jez*_*Jez的帖子

SwiftUI:取消定时器后如何重新启动它?

我有一个由主ContentViewTimerView组成的导航视图。TimerView 有一个计时器,当我调用self.timer.upstream.connect().cancel().

但是,当我返回 ContentView 然后再次导航到 TimerView 时,我希望计时器再次开始计数,但这不会发生。secondsElapsed确实重置为 0 但计时器不运行。

import SwiftUI

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: TimerView()) {
                Text("Go to Timer View")
            }
        }
    }
}

struct TimerView: View {
    @State var secondsElapsed = 0
    var timer = Timer.publish (every: 1, on: .main, in: .common).autoconnect()
    var body: some View {
        VStack {
            Text("\(self.secondsElapsed) seconds elapsed")
            Button("Stop timer",
                   action: {
                    self.timer.upstream.connect().cancel()
            })
        }.onReceive(timer) { _ in …
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

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

为什么 Firebase Analytics 数据没有显示在 BigQuery 中?

我正在尝试让 Firebase Analytics 数据显示在 iOS 应用程序的 BigQuery 中,但是未创建 BigQuery 数据集,Firebase BigQuery 页面仅显示“未创建数据集”,并且在 BigQuery 中也找不到相关表。

我可以在 Firebase 控制台中正确查看 Firebase Analytics 数据,并且在 BigQuery 中创建 Crashlytics/Predictions/etc 数据集(虽然我还看不到数据,但我认为这些数据每天只批量处理一次)。因此,仅缺少流分析数据。

此威胁表明您需要“禁用 ios 启动设置上的调试模式”才能发挥作用。我不太确定这是什么意思,所以我在运行应用程序并触发一些事件之前尝试了以下操作,但没有成功:

  1. 更改Debug为编辑方案 > 运行 >Release信息> 构建配置
  2. 添加-FIRDebugDisabled编辑方案 > 运行 > 参数 > 启动时传递的参数

无论哪种情况,我总是在 Firebase 控制台中看到数据,但从未在 BigQuery 中看到数据。

eur3 (europe-west) 我注意到的另一个奇怪的事情是,Firebase 项目是在云资源位置设置的,而 Firebase 自动创建的 Crashlytics 数据集是在US 数据位置设置的。

这(Youtube 链接)基本上是我期望发生的事情。

firebase google-bigquery swift firebase-analytics

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

Swift CloudKit CoreData 远程更改通知也会针对本地更改触发

我有一个带有本地存储和存储的 CoreData 设置,只有后者与 CloudKit 同步。同步本身运行良好。

我正在尝试侦听远程更改通知,以便在来自 CloudKit 的远程更改传入时可以触发设备上的某些进程。我已经NSPersistentStoreRemoteChangeNotificationOptionKey在持久性控制器中设置了密钥,并设置了相应的观察者来侦听此通知。

观察者正确触发远程更改通知,但我的问题是,一旦保存视图上下文,它也会触发设备上产生的任何 CoreData 更改。

如果这是预期的行为,我希望通知本身至少有一些有用的信息,这样我就可以区分更改是由设备上的操作触发还是从 CloudKit 同步。

我做错了什么,或者有其他简单的方法可以在远程更改发生时收到通知吗?

持久性控制器

struct PersistenceController {
    static let shared = PersistenceController()
        
    let container: NSPersistentCloudKitContainer
    
    init() {
        container = NSPersistentCloudKitContainer(name: "MyContainerName")
        
        let storeDirectory = FileManager.default.urls(for: .applicationSupportDirectory, in: .userDomainMask).first!
        
        // Local
        let localUrl = storeDirectory.appendingPathComponent("local.store")
        let local = NSPersistentStoreDescription(url: localUrl)
        local.configuration = "Local"
        
        // Cloud
        let cloudUrl = storeDirectory.appendingPathComponent("cloud.store")
        let cloud = NSPersistentStoreDescription(url: cloudUrl)
        cloud.configuration = "Cloud"
        cloud.cloudKitContainerOptions = NSPersistentCloudKitContainerOptions(containerIdentifier: "my.container.identifier")
        cloud.setOption(true …
Run Code Online (Sandbox Code Playgroud)

core-data ios swift cloudkit

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

如何修复由复合修饰符 + 动画引起的 SwiftUI 内存泄漏?

如何修复在动画中使用复合修饰符时发生的内存泄漏?

在此示例中,我们有 4 个MySquareView具有动画旋转效果的方块,它们位于ContentView具有缩放修改器的 ZStack 中。正如您所看到的,正在使用的内存会随着时间的推移而不断增加。

在此处输入图片说明 内存泄漏

同样的问题似乎也发生在其他修饰符上。完整示例:

import SwiftUI

struct MySquare: Identifiable, Hashable {
    var id = UUID()
    var offsetX: CGFloat
    var offsetY: CGFloat
}

struct MySquareView: View {
    @State private var rotateSquare = true
    var body: some View {
        Rectangle()
            .fill(Color.purple)
            .frame(width: 30, height: 30)
            .rotationEffect(.degrees(self.rotateSquare ? -25 : 25))
            .onAppear(perform: {
                withAnimation(Animation.easeInOut(duration: 2).repeatForever(autoreverses: true)) {
                    self.rotateSquare.toggle()
                }
            })
    }
}

struct ContentView: View {


    var mySquares = [
        MySquare(offsetX: -40, offsetY: 40),
        MySquare(offsetX: 50, …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

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