我知道 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()”)并再次打开它。好像这些值仍然存储在内存中的某个地方。这当然不是用户友好的,我确信我只是监督了一些可以立即刷新列表的内容。也许有人可以帮忙。
我在 Firebase 控制台中看到,Firebase Crashlytics 似乎能够检测设备是否越狱。
是否有一种函数/方法可以在我的应用程序中读取此值以将其用于其他用例?
我在 Firebase 文档中没有找到相关内容。
我在使用 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 中使用切换的人。;-)
我有一个包含 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) 我正在努力解决一些文本字段的本地化问题。通常,如果我要翻译的文本是硬编码的,则 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 中写什么作为键。
我正在尝试更改 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)
我使用 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) 我正在尝试使用 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) swift ×6
swiftui ×5
firebase ×2
javascript ×2
core-data ×1
crashlytics ×1
didset ×1
ios ×1
localization ×1
node.js ×1
puppeteer ×1
toggle ×1