小编Wow*_*nch的帖子

CoreData 和 SwiftUI:环境中的上下文未连接到持久存储协调器

我正在尝试通过构建作业管理应用程序来自学 Core Data。我的代码构建良好,应用程序运行正常,直到我尝试向列表添加新分配。我得到这个错误Thread 1: EXC_BREAKPOINT (code=1, subcode=0x1c25719e8)以下行:ForEach(courses, id: \.self) { course in。控制台也有这个错误:Context in environment is not connected to a persistent store coordinator: <NSManagedObjectContext: 0x2823cb3a0>

我对 Core Data 知之甚少,不知道可能是什么问题。我在数据模型中设置了“作业”和“课程”实体,其中课程与作业具有一对多关系。每个作业将被归类到特定的课程下。

这是向列表添加新分配的视图的代码:

    struct NewAssignmentView: View {

    @Environment(\.presentationMode) var presentationMode
    @Environment(\.managedObjectContext) var moc
    @FetchRequest(entity: Course.entity(), sortDescriptors: []) var courses: FetchedResults<Course>

    @State var name = ""
    @State var hasDueDate = false
    @State var dueDate = Date()
    @State var course = Course()

    var body: some View {
        NavigationView {
            Form …
Run Code Online (Sandbox Code Playgroud)

core-data swift swiftui

31
推荐指数
2
解决办法
8713
查看次数

在 GitHub 工作流程中获取当前日期和时间

我有一个用于发布存储库夜间快照的 GitHub 工作流程。它使用create-release 操作。这是工作流文件现在的样子:

name: Release Nightly Snapshot

on:
  schedule:
  - cron: "0 0 * * *"

jobs:
  build:
    name: Release Nightly Snapshot
    runs-on: ubuntu-latest
    steps:
      - name: Checkout master Branch
        uses: actions/checkout@v2
        with:
          ref: 'master'
      - name: Create Release
        id: nightly-snapshot
        uses: actions/create-release@latest
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: 'nightly snapshot'
          release_name: 'nightly snapshot'
          draft: false
          prerelease: false
Run Code Online (Sandbox Code Playgroud)

我想要tag_namerelease_name使用当前日期和时间,而不是硬编码值。但是,我找不到任何关于它的文档。我该怎么做?

github github-api github-actions

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

在 AppKit 视图中嵌入 SwiftUI 视图

我有一个 SwiftUI 视图MySwiftUIView

import SwiftUI

struct MySwiftUIView: View {
    var body: some View {
        Text("Hello, World!")
    }
}
Run Code Online (Sandbox Code Playgroud)

我想将它用作 AppKit 视图的一部分。我尝试了以下代码:

import Cocoa
import SwiftUI

class MyViewController: NSViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.addSubview( NSHostingView(rootView: MySwiftUIView()) )
    }
}
Run Code Online (Sandbox Code Playgroud)

与相应的故事板:

故事板

代码构建后,结果是一个空窗口:

在此输入图像描述

我想要的是这样的:

在此输入图像描述

我应该如何实现这一点?

macos storyboard appkit swift swiftui

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

如何在 macOS 上使 SwiftUI 的 Picker 无边框/透明?

我想在 macOS 上的 SwiftUI 中设置一个无边框和透明的选择器按钮。

我尝试在 Picker 视图上使用.background(),.border().opacity()修饰符。但是,我无法使用 将背景更改为透明颜色.background(),无法使用 删除边框.border(),并且无法找到仅使用 将背景更改为透明的方法.opacity()

这是我的选择器代码:

Picker(selection: .constant(1), label: EmptyView()) {
    Text("1").tag(1)
    Text("2").tag(2)
}
.scaledToFit()
Run Code Online (Sandbox Code Playgroud)

.constant(1) 是占位符

目前选择器看起来像这样:
当前选择器外观

我希望它看起来像 Mac 上联系人应用程序中的选择器:
通缉器外观


更新(2019-11-30)

在尝试了适用于 a 的所有可能的修饰符和函数后Picker,我确定到目前为止没有解决方案。截至目前,SwiftUI 作为故事板或 XIB 的替代品尚不完整。

macos appkit swift swiftui

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

多态性和 SwiftUI

给出以下示例:

class ProfileTab: Identifiable {
    let id = UUID()
    let name: String

    init(name: String) {
        self.name = name
    }
}

class ProfileQuoteTab: ProfileTab {
    let answer: String
    let prompt: String

    init(name: String, answer: String, prompt: String) {
        self.answer = answer
        self.prompt = prompt
        super.init(name: name)
    }
}

class ProfileImageTab: ProfileTab {
    let image: Image

    init(name: String, image: Image) {
        self.image = image
        super.init(name: name)
    }
}

struct ContentView: View {
    let tabs: [ProfileTab] = [
        ProfileQuoteTab(name: "This is a quote …
Run Code Online (Sandbox Code Playgroud)

polymorphism inheritance casting swift swiftui

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

在 ScrollView 中居中并对齐 SwiftUI 元素

我有以下 SwiftUI 视图:

import SwiftUI

struct MySwiftUIView: View {
    var body: some View {
        VStack {
            HStack {
                Text("top leading text")
                Spacer()
            }
            Spacer()
            HStack {
                Spacer()
                Text("centered text")
                Spacer()
            }
            Spacer()
            HStack {
                Spacer()
                Text("bottom trailing text")
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

运行时看起来像这样:

在此处输入图片说明

如果我将视图嵌入ScrollView这样的:

import SwiftUI

struct MySwiftUIView: View {
    var body: some View {
        ScrollView {
            VStack {
                HStack {
                    Text("top leading text")
                    Spacer()
                }
                Spacer()
                HStack {
                    Spacer()
                    Text("centered text")
                    Spacer()
                }
                Spacer()
                HStack {
                    Spacer() …
Run Code Online (Sandbox Code Playgroud)

swift swiftui

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

Swift - zip/unzip 内存中的数据,无需任何文件系统交互

我的代码需要解析大量 JSON 文件,这些文件托管在 GitHub 上,并且只能捆绑为 1 个 ZIP 文件。因为 ZIP 文件只有大约 80 MB,所以我想将整个解压缩操作保留在内存中。

我能够将 ZIP 文件作为Data?变量加载到内存中,但我无法找到一种方法来解压缩Data内存中的变量,然后将解压缩的文件/数据分配给其他一些变量。我尝试过使用ZIP Foundation,但其Archive类型的初始值设定项仅采用文件 URL。我没有尝试Zip,但它的文档显示它也需要文件 URL。

这是我的代码:

import Cocoa
import Alamofire

class ViewController: NSViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        let zipURL = URL(string: "https://github.com/KSP-CKAN/CKAN-meta/archive/master.zip")!

        AF.request(zipURL).validate().responseData { response in
            var zipData: Data? = response.data
            //  Here I want to unzip `zipData` after unwrapping it.
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我还考虑过将Data变量作为文件传递,但未能找到方法。


更新(2019-12-01 05:00)

根据ZIPFoundation 上的拉取请求线程,我正在寻找的功能将包含在下一个版本中。我尝试使用 …

macos zip foundation swift zipfoundation

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

使用 GitHub Actions 创建标签而不是发布

目前在我的 GitHub 存储库中,我有以下每天发布夜间快照的工作流程,并使用当前日期作为发布名称和标签名称:

name: Nightly Snapshot

on:
  schedule:
  - cron: "59 23 * * *"

jobs:
  build:
    name: Release
    runs-on: ubuntu-latest
    steps:
      - name: Get current date
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      - name: Checkout branch "master"
        uses: actions/checkout@v2
        with:
          ref: 'master'
      - name: Release snapshot
        id: release-snapshot
        uses: actions/create-release@latest
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
        with:
          tag_name: ${{ steps.date.outputs.date }}
          release_name: ${{ steps.date.outputs.date }}
          draft: false
          prerelease: false
Run Code Online (Sandbox Code Playgroud)

GitHub 将所有以这种方式创建的快照标记为最新版本。但是,我想避免这种情况,并实现类似于Swift 快照的效果:快照只是标签;尽管它们出现在版本中,但它们的处理方式不同。

我应该如何修改我的工作流程文件来实现这一点?谢谢!

github github-api git-tag github-release github-actions

5
推荐指数
3
解决办法
5846
查看次数

Swift get vs _read

以下2个下标有什么区别?

subscript(position: Int) {
    get { ... }
}
Run Code Online (Sandbox Code Playgroud)
subscript(position: Int) {
    _read { ... }
}
Run Code Online (Sandbox Code Playgroud)

access-control readonly subscript swift

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

如何授予容器外部文件系统访问权限?

根据Apple 的文档,应用程序要访问其容器外部以及此处列出的目录之外的文件系统,需要指定文件访问临时异常权利。

\n\n

我的应用程序需要读取和写入 中的一些文件~/Library/Application Support/,因此我将com.apple.security.temporary-exception.files.home-relative-path.read-write值设置/Library/Application Support/为应用程序的.entitlementplist 中。

\n\n

~/Library/Application Support/现在,如果路径是硬编码的,我的应用程序可以读取文件,如下所示:

\n\n
let filePath = URL(fileURLWithPath: "/Users/myUsername/Library/Application Support/path/to/somefile.txt")\nlet fileContent = try! String(contentsOf: filePath, encoding: .ascii)\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,如果我像下面这样做,它将不起作用:

\n\n
let filePathString = "~/Library/Application Support/path/to/somefile.txt"\nlet expandedFilePathString = NSString(string: filePathString).expandingTildeInPath\nlet filePath = URL(fileURLWithPath: expandedFilePathString)\nlet fileContent = try! String(contentsOf: filePath, encoding: .ascii) // Error\n\n// alternatively\nlet applicationSupportPath = try! FileManager.default.url(\n    for: .applicationSupportDirectory,\n    in: .userDomainMask,\n    appropriateFor: nil,\n    create: false\n)\nlet filePath = applicationSupportPath.appendingPathComponent("path/to/somefile.txt")\nlet fileContent …
Run Code Online (Sandbox Code Playgroud)

macos xcode sandbox swift

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

使用前缀列表从字符串中删除前缀

我想知道如何从给定的字符串中删除前缀列表中包含的任何前缀(例如:[“the”,“a”,“an”](例如:“A big redplanet”->“big redplanet”) ”)。

我尝试过这个想法,但我不知道它是否正确或最有效。

extension String {
  func removing(prefixes: [String]) -> String {
    var resultString = self
    prefixes.map {
      if resultString.hasPrefix($0) {
        resultString = resultString.dropFirst($0.count).description
      }
    }
    return resultString
  }
}
Run Code Online (Sandbox Code Playgroud)

想法来自这个答案:如何通过标题的第一个字母创建字典,但忽略“the”或“a/an”等文章

string swift

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

JSON 解码为 Swift 中的递归枚举并从其编码

我有一个 JSON 文件,看起来像这样:

{
    "items" : [
        { "name": "a name", "version": "a version" },
        { "version": "a 2nd version" },
        {
            "any_of": [
                { "name": "some name" },
                { "name": "some other name", "version": "some other version" },
                [
                    { "name": "another name" },
                    { "version": "another version" },
                    {
                        "any_of": [
                            [
                                { "version": "some version" },
                                { "version": "some version" }
                            ],
                            { "version": "yet another version" }
                        ]
                    }
                ]
            ]
        },
        {
            "any_of" : [ …
Run Code Online (Sandbox Code Playgroud)

recursion enums json swift codable

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