小编Jan*_*ndt的帖子

如果未显示所有 NavigationLink,SwiftUI 中 NavigationView 中的 NavigationLink `tag` 和 `selection` 将停止工作

Form我在 a中有一个项目列表NavigationView,每个项目都有一个可以通过 访问的详细视图NavigationLink。当我向列表添加新元素时,我想显示其详细视图。为此,我使用 a@State var currentSelection接收NavigationLinkselection,每个元素的功能如下tag

NavigationLink(
  destination: DetailView(entry: entry),
  tag: entry,
  selection: $currentSelection,
  label: { Text("The number \(entry)") })
Run Code Online (Sandbox Code Playgroud)

这是有效的,并且遵循Apple 文档最佳实践

令人惊讶的是,当列表中的元素多于屏幕上显示的元素(再加上~2)时,它就会停止工作。问:为什么?我该如何解决这个问题?


我做了一个最小的例子来复制这种行为:

import SwiftUI

struct ContentView: View {
    @State var entries = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
    @State var currentSelection: Int? = nil

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

ios swiftui swiftui-navigationlink swiftui-navigationview

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

在反序列化之前如何区分XML文件的类型?

我正在将MusicXML文件加载到我的程序中.问题:有两种"方言",时间部分,它们有不同的根节点(和不同的结构):

<?xml version="1.0" encoding='UTF-8' standalone='no' ?>
<!DOCTYPE score-partwise PUBLIC "-//Recordare//DTD MusicXML 2.0 Partwise//EN" "http://www.musicxml.org/dtds/partwise.dtd">
<score-partwise version="2.0">
    <work>...</work>
    ...
</score-partwise>
Run Code Online (Sandbox Code Playgroud)

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE score-timewise PUBLIC "-//Recordare//DTD MusicXML 2.0 Timewise//EN" "http://www.musicxml.org/dtds/timewise.dtd">
<score-timewise version="2.0">
   <work>...</work>
   ...
</score-timewise>
Run Code Online (Sandbox Code Playgroud)

我到目前为止反序列分数的代码是:

using (var fileStream = new FileStream(openFileDialog.FileName, FileMode.Open))
{
    var xmlSerializer = new XmlSerializer(typeof(ScorePartwise));
    var result = (ScorePartwise)xmlSerializer.Deserialize(fileStream);
}
Run Code Online (Sandbox Code Playgroud)

区分两种方言的最佳方法是什么?

c# xml xmlserializer deserialization musicxml

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