标签: ckquery

如何在没有谓词的情况下创建CKQuery?

我需要查询所有记录类型,而不进行任何过滤.我试过两种方法:

let query = CKQuery(recordType: "Pm", predicate: nil)
let query = CKQuery(recordType: "Pm", predicate: NSPredicate(format: ""))
Run Code Online (Sandbox Code Playgroud)

我收到了错误:

'NSInvalidArgumentException',原因:'无法解析格式字符串""'

怎么做?

nspredicate swift cloudkit ckquery

21
推荐指数
2
解决办法
3338
查看次数

来自私有区域的CKQuery仅返回CloudKit中的前100个CKRecords

Cloudkit私有默认区域的查询结果是否有任何限制?我不知道为什么我只使用以下查询收到前100条记录:

let p = NSPredicate(format: "(type == 'entered') AND (timestamp >= %@) AND (timestamp <= %@)", from, to)
let q = CKQuery(recordType: self.beaconRecordType, predicate: p)
q.sortDescriptors = [NSSortDescriptor(key: "timestamp", ascending: true)]
self.privateDatabase?.performQuery(q, inZoneWithID: nil, completionHandler: { results, error in

    //count = 100
    println(results.count)

}
Run Code Online (Sandbox Code Playgroud)

好的.正如Edwin在答案中提到的,解决方案是使用CKQueryOperation获取初始数据块,然后使用completionBlock中的"cursor"来触发另一个操作.这是一个例子:

UPDATE

func fetchBeacons(from:NSDate, to:NSDate) {

    let p = NSPredicate(value: true)
    let q = CKQuery(recordType: self.beaconRecordType, predicate: p)

    let queryOperation = CKQueryOperation(query: q)

    queryOperation.recordFetchedBlock = fetchedARecord

    queryOperation.queryCompletionBlock = { [weak self] (cursor : CKQueryCursor!, …
Run Code Online (Sandbox Code Playgroud)

nspredicate ios swift cloudkit ckquery

11
推荐指数
2
解决办法
4424
查看次数

如何查询CloudKit的recordID IN [CKRecordID]

我的谓词想要排除已经下载并在[CKRecordID]中可用的一些记录.现在我可以查询1个CKRecordID [0],但不能查询[CKRecordID]数组.我该如何查询数组?

let excludeIDs: [CKRecordID]
Run Code Online (Sandbox Code Playgroud)

这有效:

let pred1 = NSPredicate(format: "NOT(recordID = %@)", excludeIDs[0])
Run Code Online (Sandbox Code Playgroud)

但这不是:

let pred1 = NSPredicate(format: "NOT(recordID IN %@)", excludeIDs)
Run Code Online (Sandbox Code Playgroud)

错误:loadImageCompareRecordIDsAndEndDateThatHaveNotEnded错误:无效谓词:无效谓词:数组成员必须符合CKRecordValue :("","","","","")(CKRecordID)

代码的其他一般部分:

    let sort = NSSortDescriptor(key: "creationDate", ascending: false)
    let query = CKQuery(recordType: MyRecordTypes.ImageCompare, predicate: pred1)
    query.sortDescriptors = [sort]
    let operation = CKQueryOperation(query: query)
    operation.desiredKeys = ["endDate"]
    operation.resultsLimit = 50
Run Code Online (Sandbox Code Playgroud)

nspredicate ios cloudkit ckquery ckrecord

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

CKQuery哪里有谓词而不是字段?

我需要创建一个CKQuery谓词包含记录引用的位置,而不是记录的字段.

像这样

let query = CKQuery(recordType: "OUP", predicate: NSPredicate(format: "o = %@", "FF4FB4A9-271A-4AF4-B02C-722ABF25BF44")
Run Code Online (Sandbox Code Playgroud)

我如何设置oCKReference,而不是字段!

我收到此错误:

字段"o"的查询谓词中的字段值类型不匹配

cloudkit ckquery

8
推荐指数
2
解决办法
3410
查看次数

我能在CKQuery中使用recordID.recordName吗?

CKQuerydoc说:谓词中使用的键名对应于当前评估记录中的字段.键名可以包括记录的元数据属性的名称,例如"creationDate"或您添加到记录中的任何数据字段.

我可以在其中使用哪些元数据CKQuery?我能用record.recordID.recordName,如果有key,它的用途是什么?

ios cloudkit ckquery ckrecord

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

限制CloudKit中返回的结果数量

有没有办法限制在CKQuery?中返回的结果数量?

SQL,可以运行像这样的查询SELECT * FROM Posts LIMIT 10,15.LIMIT 10,15在CloudKit中有什么类似查询的最后部分吗?

例如,我想加载第5分的结果,然后,一旦用户向下滚动,我想加载下一个5分的结果,等等.在SQL中,它将是LIMIT 0,5,然后LIMIT 6,10,依此类推.

有一两件事,将工作是使用一个for循环,但是这将是非常密集的,因为我会从iCloud中选择所有的值,然后依次通过他们找出选择其中5,和我期待有在数据库中有很多不同的帖子,所以我只想加载那些需要的帖子.

我正在寻找这样的东西:

var limit: NSLimitDescriptor = NSLimitDescriptor(5, 10)
query.limit = limit

CKContainer.defaultContainer().publicCloudDatabase.addOperation(CKQueryOperation(query: query)
//fetch values and return them
Run Code Online (Sandbox Code Playgroud)

ios swift cloudkit ckquery

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

如何获取当前用户创建的所有CloudKit记录?

假设我有一个'物种'记录类型,其中包含由许多用户创建的公共记录.目前,我的查询检索"物种"的所有记录:

private func fetchSpecies() {
    // Fetch Public Database
    let publicDatabase = CKContainer.defaultContainer().publicCloudDatabase

    // Initialize Query
    let query = CKQuery(recordType: "Species", predicate: NSPredicate(format: "TRUEPREDICATE"))

    // Configure Query
    query.sortDescriptors = [NSSortDescriptor(key: "latinName", ascending: true)]

    // Perform Query
    publicDatabase.performQuery(query, inZoneWithID: nil) { (records, error) -> Void in
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        // Process Response on Main Thread
        self.processResponseForQuery(records, error: error)
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

如何只获取当前用户创建的记录(如设备所有者)?

谢谢!

ios swift cloudkit ckquery ckrecord

7
推荐指数
2
解决办法
2295
查看次数

CloudKit复合查询(使用OR查询)

我想使用带有两个字段的OR来​​查询CloudKit.但我找不到办法如何做到这一点.我做的是:

NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"(creatorUserRecordID == %@)", userId];
NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"(toUser == %@)", userId];
NSCompoundPredicate *compPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:@[predicate1, predicate2]];
CKQuery *query = [[CKQuery alloc] initWithRecordType:@"Message" predicate:compPredicate];
Run Code Online (Sandbox Code Playgroud)

但遗憾的是CKQuery不支持OR查询(如文档中所述)我可以通过其他方式实现此效果吗?

nspredicate ios cloudkit ckquery

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

如何以编程方式在云工具包中标记可查询的记录类型

每当我以编程方式创建新的CKRecordType时,我都会遇到cloud-kit的问题.在云工具包仪表板中,这是我收到的错误消息:在此输入图像描述

快速简单的解决方法是单击"添加ID查询索引"按钮并完成它,但是,我想知道是否有一种方法可以以编程方式完成此操作.原因在于,当部署应用程序时,用户将能够创建新的记录类型,如果每次用户决定创建新记录时我必须检查cloud-kit,那将是一个很大的麻烦和麻烦类型.

任何帮助,将不胜感激!

ios swift cloudkit ckquery

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

停止虚假的CloudKit调用?

我有一个CloudKit应用程序,其中包含publicDB中的数据.这是能够由任何授权用户创建和读取的安全数据,但我根据我的应用程序所做的查询限制了这一点.例如,用户C将不会查询表明与用户A和用户B的关系而非用户C的数据对象.

我担心有人可能越狱/劫持我的应用程序并执行授权应用程序有能力执行的查询,但绝不会这样做.我如何确定"经过身份验证"的用户实际上是使用我的应用程序的正版身份验证用户,而不是某些第三方将代码注入我的应用程序?

ios cloudkit ckquery

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

标签 统计

ckquery ×10

cloudkit ×10

ios ×8

swift ×5

nspredicate ×4

ckrecord ×3