我在String中有一个实例变量名
var name: String
Run Code Online (Sandbox Code Playgroud)
我的类实现了NSCoding协议.所以我的名字
func encodeWithCoder(aCoder: NSCoder) {
aCoder.encodeObject(self.name, forKey: kName)
}
required init(coder aDecoder: NSCoder) {
self.name = aDecoder.decodeObjectForKey(kName) as String // CRASH HERE
}
Run Code Online (Sandbox Code Playgroud)
结果?我在使用解码器启动时遇到了运行时崩溃.我将init更改为:
var temp = aDecoder.decodeObjectForKey(kName) as NSString!
self.name = aDecoder.decodeObjectForKey(kName) as String
Run Code Online (Sandbox Code Playgroud)
并意识到值temp保持正确的NSString值.所以我认为下面的行将解决它,但它会发出一个链接器错误:
self.name = aDecoder.decodeObjectForKey(kName) as NSString!
Run Code Online (Sandbox Code Playgroud)
问题是如何采取临时措施并将其命名?
我已经导航到一个新视图,NavigationLink我想以编程方式返回到我所在的位置。在 swiftUI 中还有可能吗?我知道对于模态演示,我们可以使用.isPresented环境值,但是导航呢?
我有一个用swiftUI编写的ContentView,如下所示。'''var body:some View {
NavigationView {
List {
Section {
PresentationLink(destination: Text("new Profile")) {
Text("new Profile")
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
'''
第一次点击新配置文件,一切都很好,但是当我关闭模态并尝试再次点击时,它不起作用。它是错误还是功能?
我在视图中有一个列表(将其称为视图A),在其中我通过导航链接从视图A推入视图B,并将CurrentSubjectValue操纵到初始视图A。添加数据并添加didChangd.send(value)分派到视图AI的警告是更新不属于视图的单元格。似乎从窗口中删除了视图A,这基于我以前的uinavigationviewcontroller行为是不直观的。任何的想法?
视图A(MainView)
struct MainView: View {
@ObjectBinding var currentProfileIdStore = CurrentProfileIdStore.shared
var body: some View {
NavigationView {
if (currentProfileIdStore.didChange.value == nil) {
NavigationLink(destination: ProfilesView()){ Text("show profiles view")}
} else {
List {
Section {
ForEach(0..<1) { _ in
PresentationLink(destination: ProfilesView()) {
Text("Profiles")
}
}
}
Section {
ForEach(0..<1) { _ in
Text("Items")
}
}
}.listStyle(.grouped)
}
}.navigationBarTitle(currentProfileIdStore.didChange.value ?? "unknown")
}
}
Run Code Online (Sandbox Code Playgroud)
然后显示配置文件视图
struct ProfilesView : View {
@ObjectBinding var profileManager = CurrentProfileIdStore.shared
@ObjectBinding var profileProvider = ProfileProvider.shared
var body: …Run Code Online (Sandbox Code Playgroud) 我有以下代码将 UICloudSharingController 导入 swift UI,但是当第一次集成时,它只显示一个永不停止的活动指示器,然后第二次显示它(通过 .sheet),没有活动指示器。第一次我可以看到带有活动指示器的右上角的关闭按钮。对于任何反馈,我们都表示感谢。
struct CloudSharingController: UIViewControllerRepresentable {
typealias UIViewControllerType = UICloudSharingController
func makeCoordinator() -> Coordinator {
Coordinator(self)
}
class Coordinator: NSObject, UICloudSharingControllerDelegate {
func cloudSharingController(_ csc: UICloudSharingController, failedToSaveShareWithError error: Error) {
print("asdf")
}
func itemTitle(for csc: UICloudSharingController) -> String? {
return "item title for sharing TTT"
}
var parent: CloudSharingController
init(_ cloudSharingController: CloudSharingController) {
self.parent = cloudSharingController
}
}
var share: CKShare? = nil
var container: CKContainer = CKContainer.default()
var firsTimeBlock: ((UICloudSharingController, @escaping (CKShare?, CKContainer?, Error?) -> …Run Code Online (Sandbox Code Playgroud) 在WWDC 2019期间,Apple推出NSPersistentCloudKitContainer了允许CoreData与CloudKit同步的技术。这是一个很棒的补充。在iOS 13中,Notes应用程序中还允许用户与另一个用户共享整个便笺“ FOLDER”。鉴于Apple使用CloudKit for Notes应用程序,我想创建类似的东西来了解它如何更好地工作。
com.apple.coredata.cloudkit.zone如果满足所有设置条件,Apple将创建区域并基本上将那里的所有数据同步到该区域。但是,当用户想要共享数据时,没有任何指南。根据WWDC的前一次演讲,共享将主要通过创建CUSTOM ZONE来实现。但是,新NSPersistentCloudKitContainer方法无法为CoreData中的每个实体更改区域。
我很高兴找到这些
open func record(for managedObjectID: NSManagedObjectID) -> CKRecord?
open func records(for managedObjectIDs: [NSManagedObjectID]) -> [NSManagedObjectID : CKRecord]
open func recordID(for managedObjectID: NSManagedObjectID) -> CKRecordID?
open func recordIDs(for managedObjectIDs: [NSManagedObjectID]) -> [NSManagedObjectID : CKRecordID]
Run Code Online (Sandbox Code Playgroud)
as they gave this impression that the container calls this methods to retrieve the CKRecord and hence a point to modify informations such as zone etc. but after the setup I realized when I …
我正在尝试复制有关自动将核心数据与云工具包同步的WWDC讨论的结果。
我尝试了三种方法:
制作一个新的主从视图应用程序并按照wwdc 2019演讲中的步骤进行操作,在这种情况下不会发生同步
在这种情况下,也将下载示例wwdc 2019应用程序
我制作了一个带有少量核心数据和云工具包容器的小型应用程序,在这种情况下,发生了同步,但是我必须重新启动该应用程序。我怀疑这与历史记录管理有关,因此观察到NSPersistentStoreRemoteChange通知并非一无所获。
感谢任何帮助。
我了解使用“NSSecureCoding”可以安全地将数据存储到磁盘,类似于钥匙串作为安全存储信息的地方。
我还了解钥匙串具有在同一提供商的应用程序之间共享的优势。如果人们忽略钥匙串共享功能,是否可以说,与 NSSecureCoding 相比,将数据存储在钥匙串中同样安全?
我有一个用户对象
class User: NSObject, NSSecureCoding {
private enum CodingKeys: String, CodingKey {
case test
}
public static var supportsSecureCoding: Bool {
return true
}
override init() {}
var test: String = "teeees"
func encode(with aCoder: NSCoder) {
aCoder.encode(self.test as NSString)
}
required init?(coder aDecoder: NSCoder) {
test = aDecoder.decodeObject(of: NSString.self, forKey: CodingKeys.test.rawValue)! as String
}
}
Run Code Online (Sandbox Code Playgroud)
我存档的
let user = User()
let data = NSKeyedArchiver.archivedData(withRootObject: user)
try! data.write(to: DocumentHelper.cashURLForID(id: "TTYYUU"))
Run Code Online (Sandbox Code Playgroud)
TTYYUU的内容是:
6270 6c69 7374 3030 d401 …