小编Kuh*_*ann的帖子

SwiftUI:删除所有核心数据实体条目后,列表不会自动更新

我知道 SwiftUI 使用状态驱动渲染。所以我假设,当我删除核心数据实体条目时,我的包含核心数据元素的列表会立即刷新。我使用此代码,它成功地清理了我的实体:

func deleteAll()
{
    let fetchRequest: NSFetchRequest<NSFetchRequestResult> = ToDoItem.fetchRequest()
    let deleteRequest = NSBatchDeleteRequest(fetchRequest: fetchRequest)

    let persistentContainer = (UIApplication.shared.delegate as! AppDelegate).persistentContainer

    do {
        try persistentContainer.viewContext.execute(deleteRequest)
    } catch let error as NSError {
        print(error)
    }
}
Run Code Online (Sandbox Code Playgroud)

为了让我的视图中的列表视觉上为空,我必须在之后离开视图(例如使用“self.presentationMode.wrappedValue.dismiss()”)并再次打开它。好像这些值仍然存储在内存中的某个地方。这当然不是用户友好的,我确信我只是监督了一些可以立即刷新列表的内容。也许有人可以帮忙。

core-data swift swiftui

13
推荐指数
2
解决办法
3746
查看次数

使用 Firebase 检测 iOS 越狱

我在 Firebase 控制台中看到,Firebase Crashlytics 似乎能够检测设备是否越狱。

Crashlytics-报告

是否有一种函数/方法可以在我的应用程序中读取此值以将其用于其他用例?

我在 Firebase 文档中没有找到相关内容。

firebase crashlytics swift

11
推荐指数
0
解决办法
704
查看次数

SwiftUI - 开关的使用 - 控制台日志:“无效模式 'kCFRunLoopCommonModes'” - didSet 不起作用

我在使用 SwiftUI 的切换时遇到了一般问题。每当我使用它们时,我都会收到此控制台错误:

提供给 CFRunLoopRunSpecific 的无效模式 'kCFRunLoopCommonModes' - 中断 _CFRunLoopError_RunCalledWithInvalidMode 进行调试。此消息每次执行只会出现一次。

除此之外,当我在模拟器中按下切换键时,didSet 不会打印任何内容。有没有人有想法,或者这是一个 SwiftUI 错误?

StackOverflow 上几个月前的其他相关问题似乎没有找到解决方案。

import SwiftUI


struct ContentView: View {

    @State private var notifyCheck = false {
        didSet {
            print("Toggle pushed!")
        }
    }

    var body: some View {
            Toggle(isOn: $notifyCheck) {
                Text("Activate?")
            }
    }
}

Run Code Online (Sandbox Code Playgroud)

如果这是一个错误,我想知道切换的解决方法是什么。我并不是第一个在 iOS 中使用切换的人。;-)

toggle didset swiftui

4
推荐指数
1
解决办法
2248
查看次数

TabView (SwiftUI):在已经激活的 tabItem 上响应 onTab

我有一个包含 TabView 的 ContentView.swift。

View1 中有一个带有一些子视图的 NavigationView。View2 只是一个视图。

当按下第一个 tabItem 时,我想执行一些操作(总是返回到 View1,即使在 View1 的 childView 中)。 即使它已经是活动的 tabItem。

我尝试了如下所示的 onTapGesture,它似乎没有做任何事情。在 ".tag(0)" 之前添加它也没有改变任何东西:

                            TabView {
                            View1()
                                .onTapGesture {
                                    print("Test")
                            }
                                .tabItem {
                                    Image(systemName: "doc.plaintext")
                                        .font(.system(size: 25))
                                    Text("View1")
                            }.tag(0)

                            View2()
                                .tabItem {
                                    Image(systemName: "person.crop.circle")
                                        .font(.system(size: 25))
                                    Text("View2")
                            }.tag(1)
Run Code Online (Sandbox Code Playgroud)

ios swift swiftui

4
推荐指数
1
解决办法
715
查看次数

SwiftUI - 动态文本的本地化

我正在努力解决一些文本字段的本地化问题。通常,如果我要翻译的文本是硬编码的,则 Text() 或 TextField() 的“正常”本地化在我的应用程序中不会出现任何问题:

Text("English Text")
Run Code Online (Sandbox Code Playgroud)

我将其翻译到我的 Localized.strings 中,如下所示:

"English Text" = "German Text";
Run Code Online (Sandbox Code Playgroud)

现在我想翻译更加动态的文本字段,但我知道每个可能的条目:

                TextField("New note" + (refresh ? "" : " "),text: $newToDo, onCommit: {
                    self.addToDo()
                    self.refresh.toggle()
                })
Run Code Online (Sandbox Code Playgroud)

(刷新是必要的,因为 SwiftUI 错误有时不会再次显示占位符文本。)

另一个例子是:

    func dayWord() -> String {
        let dateFormatter = DateFormatter()
        dateFormatter.timeZone = TimeZone.current
        dateFormatter.locale = Locale(identifier: "de_DE")
        dateFormatter.dateFormat = "EEEE"
        return dateFormatter.string(from: self)
    }

    var day: String {
        return data.date.dateFromMilliseconds().dayWord()
    }

   Text(day.prefix(2))
Run Code Online (Sandbox Code Playgroud)

Text(day.prefix(2)) 只有七种可能的状态,但我不知道在 Localized.strings 中写什么作为键。

localization swift swiftui

4
推荐指数
2
解决办法
6458
查看次数

SwiftUI - 如何更改嵌套在表单中的选取器的复选标记颜色

我正在尝试更改 SwiftUI 中复选标记的颜色,该复选标记在嵌套在表单内的选取器中使用。我尝试过:

UINavigationBar.appearance().tintColor = .black

但这只改变了“<返回”颜色。

struct ContentView: View {

    @State private var selectedMode = 0
    private var modes = ["#1", "#2"]


    var body: some View {
        NavigationView {
            Form {
                Section(header:Text("").font(.title)
                    .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
                ){
                    Picker(selection: $selectedMode, label: Text("Modes")) {
                        ForEach(0 ..< modes.count, id: \.self) {
                            Text(self.modes[$0])
                                .foregroundColor(Color.red)
                        }
                    }
                }
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

uinavigationbar swift swiftui

4
推荐指数
1
解决办法
2171
查看次数

Firebase-additionalInfo.isNewUser 始终返回“false”

我使用 Node.js 通过 Firebase Admin SDK 在 Firebase 中创建新用户。

这个过程运行良好,我在 Firebase 控制台中看到新用户当然从未有过登录日期(德语为“Angemeldet”): 安慰

现在我想检查用户的 iOS 登录,是否是他第一次登录:

Auth.auth().signIn(withEmail: email, password: password) { (user, error) in

    if let error = error
    {
        self.errorText = error.localizedDescription
        self.shouldAnimate = false
        return
    }

    guard user != nil else { return }

    if let user = user, let additionalInfo = user.additionalUserInfo {
        print(additionalInfo.isNewUser) // Always "false"
        self.userViewModel.firstLogin()
    }
}
Run Code Online (Sandbox Code Playgroud)

extraInfo.isNewUser 似乎正是我所需要的,但它总是返回“false”。

在 Node.js 中,我使用以下命令创建用户:

  await admin.auth().createUser({
  uid: uid.toLowerCase(),
  email: uid.toLowerCase(),
  emailVerified: true,
  password: 'notSetYet',
  disabled: false
}) …
Run Code Online (Sandbox Code Playgroud)

javascript firebase swift firebase-authentication

3
推荐指数
1
解决办法
841
查看次数

Puppeteer:访问登录对话框上的字段

我正在尝试使用 Node.js 通过 Puppeteer / Headless Chrome 从我们的 Intranet 中的页面生成 .pdf。

从随机页面生成 .pdf 没有问题,但我在打开页面时出现的登录框架上遇到了困难。

它看起来像这样:

登录

我找不到访问“Nutzername”和“Passwort”这两个字段来登录的方法,因为 Chrome 的开发人员工具不显示字段名称。

打开此页面时生成的 .pdf 文件或屏幕截图始终显示“未经授权”,就好像 Headless Chrome 在此对话框中按下 Abbrechen(中止)一样。

到目前为止我尝试过的是这样的:

const puppeteer = require('puppeteer');

(async () => {
    let url = 'http://intranet...../'
    let browser = await puppeteer.launch()
    let page = await browser.newPage()
    await page.goto(url, {waitUntil: 'networkidle2' })

    await page.type('#Nutzername', '....'); // Error here, because the identifier is wrong.

    await page.keyboard.press("Tab");

    await page.type('#Passwort', '....');

    await page.type(String.fromCharCode(13)); // Enter

    await page.pdf({
        format:"A4",
        path:'./Speiseplan.pdf',
        displayHeaderFooter: false,
        printBackground:true …
Run Code Online (Sandbox Code Playgroud)

javascript node.js puppeteer

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