仅在模拟器和第一设备中,第二设备中的CloudKit数据不更新。

问题描述 投票:0回答:1

我想让数据不被 CloudKit 在多个设备中同步。使用下面的代码,我可以成功地添加、加载和获得通知,当记录被修改时,在 CloudKit我的问题是,这只有在我使用模拟器修改数据和物理设备看到通知时才有效。

下面是我如何使用它。

  1. 我安装的应用程序在模拟器和iPhone。

  2. 从模拟器中,我去输入一个新的noterecord,我在iPhone中得到通知,这是我想要的。我也可以直接从 CloudKit dashboard 我也得到了在iPhone的通知。

  3. 第三步,不行的是...... 我到我妻子的iPhone,安装了Xcode的应用程序,并登录到了 iTunes & App Store 与我在模拟器和数据更新的第一个设备中使用的相同的帐户,然后我去输入数据在模拟器和第一个iPhone,但我没有得到任何通知,在我妻子的iPhone.我尝试直接输入数据在我妻子的iPhone,似乎坚持数据,因为我可以退出应用程序和数据不会丢失。我试着直接在我妻子的iPhone中输入数据,它似乎坚持数据,因为我可以退出应用程序,数据不会丢失。所以,我最终在两部手机中的数据完全不同,在我妻子的iPhone中,我只能看到直接在该手机中输入的数据,而在我的第一部手机中,我看到的是直接在那里输入的数据,在模拟器或CloudKit仪表板中。

我可能误解了整个生态系统和它的工作方式。我所期待的是,每一部安装了应用的手机,并且它用同样的方式登录了 iTunes & App Store 登录凭证将看到所有设备的更新。

我误解了哪一部分?

下面是代码。

Main ViewController

添加记录

public func saveNotestoCloud(){
    let privateDatabase = CKContainer.default().database(with: .private)
    if let title =  self.textfield.text, let body = textView.text, let record = self.note?.record{
        record["title"] = title
        record["note"] = body
        self.note?.record = record

        privateDatabase.save(record) { (record,error) in
            if let error = error{
                print("Error  \(error.localizedDescription)")
                return
            }
            print("Successfully saved record \(record?.recordID.recordName ?? "")")
        }
    }
}

应用代表

登记通知书

let privateDatabase = CKContainer.default().database(with: .private)

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    self.createSubscriptions()

    UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]){ (granter, error) in
        guard error == nil else{
            print(error!)
            return
        }
    }
    application.registerForRemoteNotifications()
    return true
}

private func createSubscriptions(){

    let predicate = NSPredicate(value: true)
    let subscription = CKQuerySubscription(recordType: "Notes",
                                                       predicate: predicate,
                                                       subscriptionID: "SubscriptionID",
                                                       options: [CKQuerySubscription.Options.firesOnRecordCreation,  CKQuerySubscription.Options.firesOnRecordDeletion, CKQuerySubscription.Options.firesOnRecordUpdate])

    let notificationInfo = CKSubscription.NotificationInfo()
    notificationInfo.alertLocalizationKey = "New Note"
    notificationInfo.shouldBadge = true
    subscription.notificationInfo =  notificationInfo
    let privateData = CKContainer.default().database(with: .private)
    privateData.save(subscription){ result, error in
        if let error = error {
            print(error.localizedDescription)
        }
    }
}
ios swift cloudkit
1个回答
1
投票

据我了解,CloudKit依靠的是设备设置中iCloud下登录的账号。 的iTunes & App Store账户。

如果你想让你妻子的iPhone看到同样的CloudKit数据,你必须先退出,然后在iCloud设置中用你的Apple ID重新登录。

© www.soinside.com 2019 - 2024. All rights reserved.