我按照"故事板教程"制作了一些表视图控制器; 现在我想将其中一个更改为常规View Controller.
有没有办法做到这一点,而不是一个新的?
不能 100% 确定它是否是由 引起的,因为anchor我刚刚删除了它并且到目前为止还没有经历过崩溃(如果发生更多崩溃,将会报告) - 有人可以检查并帮助看看这是否真的是错误所在吗?还要提交 Apple bug。
我的观点是这样的:
\nvar body: some View {\n ScrollViewReader { scrollProxy in\n ScrollView {\n if isShowingContent {\n LazyVStack {\n ForEach(mo.msgMos.indices, id: \\.self) { i in\n ...\n }\n }\n }\n }\n .onChange(of: mo.scrollToIdx) { idx in\n withAnimation {\n scrollProxy.scrollTo(targetIdx, anchor: .center)\n }\n }\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\n而\xc2\xa0崩溃堆栈如下所示:
\nCrashed: com.apple.main-thread\n0 AttributeGraph 0x1cedce974 AGGraphGetValue + 284\n1 SwiftUI 0x1addcbe5c _ViewCache.layout.getter + 52\n2 SwiftUI 0x1addcc2f4 _ViewCache.withPlacementData<A>(_:) + 160\n3 SwiftUI 0x1addd02d0 closure #1 in IncrementalScrollable.makeTarget(at:anchor:) + …Run Code Online (Sandbox Code Playgroud) 我读到三元运算符??如果不是nil则解包一个可选项,但如果我这样做:
var type: String?
type = "milk"
let certainType = type ?? "melon"
Run Code Online (Sandbox Code Playgroud)
那么CertainType仍然是a String?,如果我这样做的话
println("it's a \(certainType)")
Run Code Online (Sandbox Code Playgroud)
它将打印:
it's a Optional("milk")
Run Code Online (Sandbox Code Playgroud)
思考?
更新:
抱歉混淆 - 我的意思是var类型:字符串?
我知道它应该打印"它是牛奶",但我在控制台中看到的是"它是一个可选的("牛奶")" - 其他人遇到了同样的问题?这可能是由字符串插值引起的吗?
@Antonio提问,这里有更多的上下文和实际代码和日志记录快照 - 类型来自Note,它是一个用于处理xcdatamodel的NSManagedObject类
class Note: NSManagedObject {
@NSManaged var type: String?
}
Run Code Online (Sandbox Code Playgroud)
我在某个时候将类型设置为'todo',然后使用以下代码将它们打印出来:
println("type class:\(_stdlib_getDemangledTypeName(note.type))")
let type1 = note.type ?? "note"
println("type1:\(type1)")
let type2: String = note.type ?? "note"
println("type2:\(type2)")
Run Code Online (Sandbox Code Playgroud)
并输出:
type class:Swift.Optional
type1:Optional("todo")
type2:todo
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,如果我没有明确地将type1的类型标记为String,它将打印不需要的结果Optional("todo") - 我在字符串插值中使用类型来构造路径,因此它很重要
从文档中我们应该使用:
DispatchQueue(label: "background").async {
autoreleasepool {
let realm = try! Realm()
let theDog = realm.objects(Dog.self).filter("age == 1").first
try! realm.write {
theDog!.age = 3
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,该用法似乎与以下内容完全相同:
DispatchQueue(label: "background", autoreleaseFrequency: .workItem).async {
let realm = try! Realm()
let theDog = realm.objects(Dog.self).filter("age == 1").first
try! realm.write {
theDog!.age = 3
}
}
Run Code Online (Sandbox Code Playgroud)
有人可以确认第二种方法按预期工作吗?
无法在doc或Google中找到有关此内容的具体信息,因此以下是示例:
class Parent: Object {
let children = List<Child>()
}
class Child: Object {
weak var parent: Parent?
}
Run Code Online (Sandbox Code Playgroud)
当我想删除特定的Child"child1"时,我应该使用:
Realm().write { realm.delete(child1) }
Run Code Online (Sandbox Code Playgroud)
或者我应该在父母手动删除它(繁琐):
if let parent = child1.parent {
if let idx = parent.children.indexOf(child1) {
parent.children.removeAtIndex(idx)
}
}
Realm().write { realm.delete(child1) }
Run Code Online (Sandbox Code Playgroud)
谢谢!
关于如何将 UIView 转换为 UIImage,使用view.drawHierarchy(in:)或view.layer.renderInContext(). 但是,即使将比例设置为设备比例,结果仍然是非常糟糕的分辨率。我想知道是否有办法将 UIView 转换为具有高分辨率和质量的 UIImage?
swift ×5
ios ×2
realm ×2
xcode ×2
breakpoints ×1
debugging ×1
iphone ×1
objective-c ×1
scrollview ×1
storyboard ×1
swift2 ×1
swiftui ×1
uiimage ×1
uiview ×1