小编Ara*_*ash的帖子

施展NSString!to swift中的String

我在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)

问题是如何采取临时措施并将其命名?

string casting nscoding nsstring swift

13
推荐指数
1
解决办法
3万
查看次数

SwiftUI 导航链接弹出

我已经导航到一个新视图,NavigationLink我想以编程方式返回到我所在的位置。在 swiftUI 中还有可能吗?我知道对于模态演示,我们可以使用.isPresented环境值,但是导航呢?

navigation swiftui

10
推荐指数
3
解决办法
6452
查看次数

swiftUI PresentaionLink第二次不起作用

我有一个用swiftUI编写的ContentView,如下所示。'''var body:some View {

    NavigationView {
        List {
            Section {
                PresentationLink(destination: Text("new Profile")) {
                    Text("new Profile")
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

'''

第一次点击新配置文件,一切都很好,但是当我关闭模态并尝试再次点击时,它不起作用。它是错误还是功能?

modal-dialog swiftui

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

SwiftUI UItableView被告知在不使用视图层次结构的情况下布局其可见单元格和其他内容

我在视图中有一个列表(将其称为视图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)

warnings list view-hierarchy swiftui

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

UICloudSharingController 在 Xcode 11 中显示无限活动指标

我有以下代码将 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)

controller sharing cloudkit ios13 swiftui

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

iOS 13,CloudKit和CoreData Sync与自定义区域进行共享

在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 …

synchronization core-data zone cloudkit

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

核心数据和CloudKit同步WWWDC 2019不适用于Beta 3

我正在尝试复制有关自动将核心数据与云工具包同步的WWDC讨论的结果。

我尝试了三种方法:

  1. 制作一个新的主从视图应用程序并按照wwdc 2019演讲中的步骤进行操作,在这种情况下不会发生同步

  2. 在这种情况下,也将下载示例wwdc 2019应用程序

  3. 我制作了一个带有少量核心数据和云工具包容器的小型应用程序,在这种情况下,发生了同步,但是我必须重新启动该应用程序。我怀疑这与历史记录管理有关,因此观察到NSPersistentStoreRemoteChange通知并非一无所获。

感谢任何帮助。

synchronization core-data cloudkit

3
推荐指数
2
解决办法
417
查看次数

NSSecureCoding 与 Keychain

我了解使用“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 …

security keychain banking nssecurecoding swift

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