标签: ckquery

过滤CLLocationCoordinate2d半径内的PHAssetCollections

我正在使用Photos框架(又名PhotoKit).在我的应用程序中,我需要收集Moments(属于类型PHAssetCollection).PHAssetCollection有一个属性CLLocation *approximateLocation.

但是NSPredicate当我从PhotoKit检索Moments时,我无法工作.

-(void)getMomentsNearCoordinate:(CLLocationCoordinate2D)coordinate completionBlock:(PKAssetManagerArrayBlock)completionBlock{
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        PHFetchOptions *options = [[PHFetchOptions alloc] init];
        options.predicate = [NSPredicate predicateWithFormat:@"approximateLocation.coordinate.latitude < 37.0"];

        self.moments = [PHAssetCollection fetchMomentsWithOptions:options];

        // Convert PHCollection into NSArray
        NSMutableArray *momentsArray = [[NSMutableArray alloc]initWithCapacity:self.moments.count];
        [self.moments enumerateObjectsUsingBlock:^(PHAssetCollection *moment, NSUInteger idx, BOOL *stop) {
            [momentsArray addObject:moment];
        }];

        dispatch_async(dispatch_get_main_queue(), ^{
            completionBlock([NSArray arrayWithArray:momentsArray]);
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

调试器将停止运行

self.moments = [PHAssetCollection fetchMomentsWithOptions:options];
Run Code Online (Sandbox Code Playgroud)

有错误:

***由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'获取选项中不支持的谓词:approximateLocation.coordinate.latitude <37'

这似乎很奇怪,因为我可以使用或NSPredicate过滤.startDateendDate

无论如何,接下来我以为我会尝试使用NSPredicatewith块:

-(void)getMomentsNearCoordinate:(CLLocationCoordinate2D)coordinate completionBlock:(PKAssetManagerArrayBlock)completionBlock{ …
Run Code Online (Sandbox Code Playgroud)

core-location nspredicate ios photokit ckquery

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

CKQuery的distanceToLocation上没有NSSortDescriptor?

使用CloudKit CKQuery,您可以过滤距离(参见示例).但你怎么能对距离进行排序呢?喜欢位置ASC.位置上的排序描述符返回错误query.sortDescriptors = [NSSortDescriptor(key: "distanceToLocation", ascending: true)]:

  static func getNearbySpots(location : CLLocation, completionHandler: (spots : CKRecord[]) -> Void) {
        let predicate = NSPredicate(format: "distanceToLocation:fromLocation:(location, %@) < 10000", location)

        let queryOperation = CKQueryOperation(query: query)
        var results : CKRecord[] = []

        queryOperation.recordFetchedBlock = {
            results += $0
        }

        queryOperation.queryCompletionBlock = {
            if $1 {
                NSLog($1.description,[])
                abort()
            } else {
                completionHandler(spots: results)
            }
        }

        self.publicDB().addOperation(queryOperation)
    }
Run Code Online (Sandbox Code Playgroud)

cloudkit ckquery

4
推荐指数
1
解决办法
847
查看次数

我可以从 CloudKit 接收与 CKQuery 对应的记录数吗?

我尝试为此使用 CKQueryOperation:

CKQueryOperation *o = [[CKQueryOperation alloc] initWithQuery:query];
[o setDesiredKeys:@[]];
Run Code Online (Sandbox Code Playgroud)

但它仍然返回了很多我此时不需要的数据

<CKRecord: 0x79881a50; recordType=Comment, recordID=CBB7B269-47AH-406E-8934-682D31501778:(_defaultZone:__defaultOwner__), recordChangeTag=i1x8j1ey, values={
}>
{
    creatorUserRecordID -> <CKRecordID: 0x7966e9d0; _e5b178bde573ba6fee336b9ed8:(_defaultZone:__defaultOwner__)>
    lastModifiedUserRecordID -> <CKRecordID: 0x7966cdd0; _e5b178bd3e9e7a6e336b9f34ed8:(_defaultZone:__defaultOwner__)>
    creationDate -> 2014-10-31 07:20:45 +0000
    modificationDate -> 2014-10-31 07:20:45 +0000
    modifiedByDevice -> iPhone Simulator
}
Run Code Online (Sandbox Code Playgroud)

我只需要一个记录计数。

xcode ios cloudkit ckquery

4
推荐指数
1
解决办法
1420
查看次数

使用 Cloudkit Assets 作为 UIimage

我在 CloudKit 中保存了图像作为资产。每个记录还有其他属性。我可以收集记录并使用其他属性,但我无法在我的 ImageView 中使用资产。我是 Swift 编程的新手,因此我收到的错误没有任何意义。

let container = CKContainer.default()
let publicDB = container.publicCloudDatabase    

let query1 = CKQuery(recordType: "movieArray", predicate: predicate2)
    publicDB.perform(query1, inZoneWith: nil) {(results:[CKRecord]?, error:Error?) in
        if error != nil {
            DispatchQueue.main.async {
                print("Cloud Query Error - Fetch Establishments: \(String(describing: error))")
            }
            return
        }
        for record in results! {
            DispatchQueue.main.async {
                let asset = record["myImageKey"] as? CKAsset
                let data = NSData(contentsOf: (asset?.fileURL)!)
                let image = UIImage(data: data! as Data)
                print("Test")
                self.detailImage.image = image
            }
            self.movieCast.text = record.object(forKey: "Actors") …
Run Code Online (Sandbox Code Playgroud)

swift cloudkit ckquery ckasset

3
推荐指数
1
解决办法
747
查看次数

CKQueryOperation错误:此操作受速率限制

在Apple审核期间,只有一次error 1298: This operation has been rate limited下载记录时CKQueryOperation,客户端收到来自CloudKit的错误.我该如何解决这个问题?

这是代码,没什么特别的:

let query = CKQuery(recordType: "Movie", predicate: NSPredicate(format: "creationDate > %@", d!))
let qo = CKQueryOperation(query: query)
let fb: (CKRecord!) -> () = {record in

    temporaryContext.performBlockAndWait({

        let fr = NSFetchRequest(entityName: "Movie")
        fr.predicate = NSPredicate(format: "recordName = %@", record.recordID.recordName)

        let a = temporaryContext.executeFetchRequest(fr, error: nil) as! [Movie]
        if a.count == 0 {

            let m = NSEntityDescription.insertNewObjectForEntityForName("Movie", inManagedObjectContext: temporaryContext) as! Movie
            m.title = record.valueForKey("title") as! String
            m.image = (record.valueForKey("image") as! …
Run Code Online (Sandbox Code Playgroud)

ios cloudkit ckquery

2
推荐指数
1
解决办法
1054
查看次数

查询系统字段时出现CKError:拒绝了“未知字段'createdAt'”

我正在createdAt像这样对系统字段进行排序:

query.sortDescriptors = [NSSortDescriptor(key: "createdAt", ascending: false)]
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

CKError 0x1c4447fb0:“无效的参数”(12/2018); 服务器消息=“未知字段'createdAt'”;uuid = 9C450848-2449-4892-93BC-C46363203042; 容器ID =“ ...

我可以查询和排序以这种方式创建的字段。与系统字段有什么不同?该字段的索引是可排序和可查询的。

cloudkit ckquery

2
推荐指数
1
解决办法
314
查看次数

Swift 3如何为特定日期创建日期

在swift 2.3中,我编写了一个函数,它将日期转换为6-01-16,将其转换为NSDate,然后在CKQuery中使用它.我不知道如何为Swift 3更新这个.

这是我目前的代码:

let formatter = DateFormatter()
    formatter.dateFormat = "yyyymmdd"
    let olddate = formatter.date(from: "20160601")
    print(olddate)
Run Code Online (Sandbox Code Playgroud)

这不起作用,我该如何更改语法?

ios swift ckquery

-1
推荐指数
1
解决办法
3304
查看次数

标签 统计

ckquery ×7

cloudkit ×5

ios ×4

swift ×2

ckasset ×1

core-location ×1

nspredicate ×1

photokit ×1

xcode ×1