比较 Cloudkit 上的订阅
Compare subscriptions on Cloudkit
我正在尝试将用户拥有的现有订阅的谓词与他即将创建的订阅进行比较。只是为了确保我不会两次创建相同的订阅。
可是我的if subscription.predicate! == predicate always
returnsfalse
我的谓词:
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)
}
}
}
我正在尝试将用户拥有的现有订阅的谓词与他即将创建的订阅进行比较。只是为了确保我不会两次创建相同的订阅。
可是我的if subscription.predicate! == predicate always
returnsfalse
我的谓词:
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)
}
}
}