gpt4 book ai didi

ios - MKPlacemark() 创建保留周期

转载 作者:行者123 更新时间:2023-12-01 21:29:40 24 4
gpt4 key购买 nike

我有一个@State 属性,它使用我创建的结构(地标)进行了初始化,该结构接受了 MKPlacemark。

@State private var selectedLandmark: Landmark = Landmark(placemark: MKPlacemark())
这是结构的代码:
import Foundation
import MapKit

struct Landmark {

let placemark: MKPlacemark

var id: UUID {
UUID()
}

var name: String {
placemark.name ?? ""
}

var title: String {
placemark.title ?? ""
}

var coordinate: CLLocationCoordinate2D {
placemark.coordinate
}
}
每当此 View 中的任何状态/绑定(bind)变量有任何更新时,我都会收到 EXC_BAD_ACCESS 错误并且没有日志。如果我删除对 MKPlacemark 的引用,一切正常。这可能是强引用被保留在某处的情况吗?
重现步骤:
创建一个“子” View :
import SwiftUI
import MapKit

struct MKPlaceChild: View {
@Binding var showCreateEvent: Bool
@State private var selectedLandmark: Landmark = Landmark(placemark: MKPlacemark())

var body: some View {
VStack {
Text("Hello, World!")

Button("Cancel") {
self.showCreateEvent = false
}
}
}
}
创建父 View :
struct MKPlaceParent: View {
@State var showCreateEvent: Bool = true
var body: some View {
VStack {
if showCreateEvent {
MKPlaceChild(showCreateEvent: $showCreateEvent)
} else {
Text("Hello")
}
}
}
}
如果您点击“取消”按钮,则会发生错误:(
任何帮助,将不胜感激

最佳答案

问题出在错误的初始化程序中。这是固定部分(使用 Xcode 12/iOS 14 测试)

struct MKPlaceChild: View {
@Binding var showCreateEvent: Bool
@State private var selectedLandmark: Landmark = Landmark(placemark:
MKPlacemark(coordinate: CLLocationCoordinate2D())) // << here !!
...

关于ios - MKPlacemark() 创建保留周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63107790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com