比较 Cloudkit 上的订阅

Compare subscriptions on Cloudkit

我正在尝试将用户拥有的现有订阅的谓词与他即将创建的订阅进行比较。只是为了确保我不会两次创建相同的订阅。

可是我的if subscription.predicate! == predicate alwaysreturnsfalse

我的谓词:

var predicate = NSPredicate()
predicate = NSPredicate(format:"validUserIDs CONTAINS %@ AND expiryDate > %@ AND NOT(invalidUserIDs CONTAINS %@)", userCloudID!, dateNow, userCloudID!)

我的fetch订阅方式

 publicDatabase.fetchAllSubscriptionsWithCompletionHandler { (subscriptions: [CKSubscription]?, error: NSError?) in
        if error != nil
        {
            print("-> cloudKitSubscribeToChat - fetch subscription error")
        }
        else
        {
            print("-> cloudKitSubscribeToChat - fetch subscription no error")
            if subscriptions?.count == 0
            {
                print("-> cloudKitSubscribeToChat - subscription count = 0, create")
                subscribe()
            }
            else
            {
                print("-> cloudKitSubscribeToChat - subscription count > 0, create")
                var exists = false
                for subscription in subscriptions!
                {
                    if subscription.predicate == predicate
                    {
                        print("-> cloudKitSubscribeToChat - subscription count > 0, true")
                        exists = true
                    }
                    else
                    {
                        print("-> cloudKitSubscribeToChat - subscription count > 0, false")
                        exists = false
                    }
                }
                if exists == false
                {
                    print("-> cloudKitSubscribeToChat - subscription do not exists, create")
                    subscribe()
                }
                else
                {
                    print("-> cloudKitSubscribeToChat - subscription already exists")
                    result(error: nil)
                }
            }
        }
    }

可以为我的问题找到答案。基本上是将它在查询中找到的 alertBoddies 与它打算创建的 alertBody 进行比较。

if subscriptionUpdate.notificationInfo!.alertBody == subscription.notificationInfo!.alertBody

应该是这样的:

publicDatabase.fetchAllSubscriptionsWithCompletionHandler { (subscriptions: [CKSubscription]?, error: NSError?) in
        if error != nil
        {
            print("-> cloudKitSubscribeToChat - fetch subscription error")
        }
        else
        {
            print("-> cloudKitSubscribeToChat - fetch subscription no error")
            if subscriptions?.count == 0
            {
                print("-> cloudKitSubscribeToChat - subscription count = 0, create")
                subscribe()
            }
            else
            {
                print("-> cloudKitSubscribeToChat - subscription count > 0, create")
                var exists = false
                for subscription in subscriptions!
                {
                     print("-> cloudKitSubscribeToChat - subscription compare, \(subscriptionUpdate.notificationInfo!.alertBody) = \(subscription.notificationInfo!.alertBody)")
                    if subscriptionUpdate.notificationInfo!.alertBody == subscription.notificationInfo!.alertBody
                    {
                        print("-> cloudKitSubscribeToChat - subscription count > 0, exists = true")
                        exists = true
                    }
                    else
                    {
                        print("-> cloudKitSubscribeToChat - subscription count > 0, exists = false")
                    }
                }
                if exists == false
                {
                    print("-> cloudKitSubscribeToChat - subscription do not exists, create")
                    subscribe()
                }
                else
                {
                    print("-> cloudKitSubscribeToChat - subscription already exists")
                    result(error: nil)
                }
            }
        }