我的应用程序包含一个资源密集型操作,该操作根据从 XML 提要中提取的数据填充数组。我不希望此操作锁定主线程(以及为数组提供新数据时的 UI),因此它是在后台完成的。
let dispatchQueue = DispatchQueue(label: "concurrent.queue", qos: .utility, attributes: .concurrent)
class XMLHandler: ObservableObject {
let context: NSManagedObjectContext
@Published var myArray: [CustomObject] = []
init(context: NSManagedObjectContext) {
self.context = context
}
...some code...
func populateArray {
dispatchQueue.async {
...xml parsing happens...
(xmlOutputObject) in
for x in xmlOutputObject {
self.myArray.append(x)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
在其他地方,我的 SwiftUI 视图使用 myArray 来填充它的列表:
struct MyView: View {
@EnvironmentObject var handler: XMLHandler
var body: some View {
List{
ForEach(handler.myArray) { CustomObject in
... generate …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的应用程序中实现颜色主题选择器。我试图克服的最后一个障碍是动态更改 UINavigationBar 的颜色。目前,我的更改颜色的功能确实有效,但只有当应用程序从关闭状态重新启动时才会生效。
我的根视图控制器设置 UINavigationBar 的初始状态,如下所示:
struct MyRootView: View {
init() {
UINavigationBar.appearance().backgroundColor = getPreferredThemeColour()
UINavigationBar.appearance().largeTitleTextAttributes = [
.foregroundColor: UIColor.white]
}
var body: some View {
...
Run Code Online (Sandbox Code Playgroud)
getPreferredThemeColour() 只是从 UserDefaults 返回所需的 UIColour
我的主题选择器具有可以更改颜色属性的按钮,如下所示:
Button(action: {
UserDefaults.standard.set(UIColor.blue, forKey: "theme")
UINavigationBar.appearance().backgroundColor = UIColor.blue }) {
Run Code Online (Sandbox Code Playgroud)
我似乎找不到任何方法来“即时”刷新 UINavigationBar 以反映所做的更改。该应用程序始终需要重新启动。
任何帮助将不胜感激!谢谢。
我正在开发一个简单的iOS 9应用程序(使用Swift和Xcode 7.01),它使用Timehop样式界面显示与当天相对应的数据,可以追溯到X年.
我想在第一个运行时播种我的CoreData模型,在第一个运行时(或稍后在用户首选项中更改)基于用户选择的选项使用特定数据填充它.但是,我希望导入整个数据源,以便在更改用户首选项时可以使用不同的数据
我要迁移到CoreData的当前数据源目前是CSV格式.我的问题是,用于导入/播种到CoreData的最简单的文件格式是什么,执行这样的任务时是否有任何最佳实践,并且是否有正确的方向我可以进行实施?