首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只在模拟器和第一设备中不更新第二设备中的CloudKit数据

只在模拟器和第一设备中不更新第二设备中的CloudKit数据
EN

Stack Overflow用户
提问于 2020-04-22 18:02:23
回答 1查看 287关注 0票数 0

我试图在多个设备中保持来自CloudKit的数据同步。使用下面的代码,我可以在CloudKit中修改记录时成功地添加、加载和获取通知,我的问题是,只有在使用模拟器修改数据和使用物理设备查看通知时,这才有效。

我就是这么用它的。

  1. --我在模拟器和iPhone中安装了这个应用程序。在模拟器中的
  2. 中,我输入了一个新的注释/记录,我在iPhone中得到了通知,这正是我想要的。我还可以直接从CloudKit dashboard输入记录,我还可以在iPhone.
  3. 中获得通知,第三步不工作的是.我去了我妻子的iPhone,安装了Xcode的应用程序,用我在模拟器和数据更新的第一个设备上使用的帐户登录到iTunes & App Store上,然后我去在模拟器和第一个iPhone中输入数据,但是我在妻子的iPhone中没有收到任何通知。我试着在我妻子的iPhone中直接输入数据,因为我可以退出应用程序,数据也不会丢失,所以数据似乎会持久化。所以,我在两部手机中得到了完全不同的数据,在我妻子的iPhone中,我只看到了在手机中直接输入的内容,在我的第一部手机中,我看到了在那里直接输入的内容,在模拟器中或者在CloudKit仪表板中。

我可能误解了整个生态系统以及它是如何运作的。我所期待的是,每一部安装了应用程序并使用相同iTunes & App Store登录凭据登录的手机都会看到所有设备中的更新。

我在这里误解了什么?

以下是守则:

主ViewController

添加记录

代码语言:javascript
复制
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 ?? "")")
        }
    }
}

应用程序代表

注册通知

代码语言:javascript
复制
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)
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-22 20:50:35

据我所知,CloudKit依赖于设备设置中在iCloud下登录的帐户,而不是 iTunes & App帐户。

如果你想让你妻子的iPhone看到相同的CloudKit数据,你必须注销,并在iCloud设置中用你的苹果ID登录。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61372007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档