gpt4 book ai didi

iphone - 如何使用 CoreData 执行计算查询

转载 作者:行者123 更新时间:2023-12-03 19:16:30 31 4
gpt4 key购买 nike

我有 T-SQL 背景,所以 CoreData 的东西对我来说有点新鲜。

我正在制作一个应用程序原型(prototype),该应用程序最终将使用 MS SQL 后端 Web 服务进行查询。

在我的后端,我的 t-sql 查询将是这样的:

SELECT *, SQRT(SQUARE(myX - latitude) + SQUARE(myY - longitude)) Distance
FROM Locations
WHERE latitude > myX
AND latitude < myX + deltaX
AND longitude > myX
AND latitude < myY + deltaY
ORDER BY SQRT(SQUARE(myX - latitude) + SQUARE(myY - longitude))

我如何使用谓词在原型(prototype)的 CoreData 中执行相同的查询(如果这是最好的方法)

注意我更感兴趣的是顺序

最佳答案

首先,认识到核心数据首先是一个对象层次结构。因此,您请求的不是列,而是对象。

这样,您将需要使用 NSPredicate 构造一个 NSFetchRequest ,并且谓词将类似于:

[NSPredicate predicate withFormat:@"latitude > %@ AND latitude < %@ AND 
longitude > %@ and longitude < %@", someFloatObject1, someFloatObject2,
someFloatObject3, someFloatObject4];

您还可以向 NSFetchRequest 添加排序,尽管您无法在排序中进行计算。因此,您可能希望在获取对象后执行排序。

更新

您可以在对象上拥有 transient 属性,然后使用类似“-updateDistanceCalFrom:someFloat”的方法。然后,使用对象数组,您可以执行以下操作:

NSArray *myFetchedArray = ...
[myFetchedArray makeObjectsPerformSelector:@(updateDistanceCalcFrom:)
withObject:someFloatObject];
NSSortDescriptor *calcSort = ...;
NSArray *descriptors = [NSArray arrayWithObject:calcSort];
[calcSort release], calcSort = nil;
NSArray *sortedArray = [myFetchedArray sortedArrayUsingDescriptors:descriptors];

关于iphone - 如何使用 CoreData 执行计算查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2409912/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com