标签: nsfetchrequest

CoreData:查找计算属性的最小值

假设我有一个CoreData实体"Point",它有两个属性x和y(两个NSNumber).

NSPredicate如何让我找到最接近的点a,b?距离= sqrt((xa)(xa)+(yb)(yb))

虽然我可以定义一个计算到预定义点的距离的瞬态属性,但我无法看到在启动fetchrequest时如何以编程方式更改该点.

任何帮助将不胜感激.

cocoa core-data nspredicate nsfetchrequest

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

NSPredicate过滤当前时间

我正在尝试创建一个NSPredicate(用于a NSFetchRequest中的核心数据NSFetchedresultsController),根据当前时间过滤记录.

不是谓词创建的时间:

[NSPredicate predicateWithFormat:@"(criticalDate < %@)", [NSDate date]]

但是评估谓词的时间,因为我想避免一直使用新的fetchRequests更新fetchedResultsController.我正在寻找的东西(但我自己找不到)是这样的:

[NSPredicate predicateWithFormat:@"(criticalDate < ????)"]

这是为iPhone,这意味着now()不支持,所以我想无论解决方案是什么,它将是一种黑客攻击.

提前致谢

sqlite core-data objective-c nspredicate nsfetchrequest

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

NSPredicate,以一对多关系的子集获得结果

我正在努力使用Core Data和NSFetchedResultsController.

我的数据模型如下所示:

Product与一对多的关系称为dataLines.该dataLine实体具有属性名称theWeek.

我想抓住所有Product地方dataLines.theWeek == someValue.使用子查询可以轻松完成此操作.但是这会返回所有dataLines.是否有可能创建一个NSPredicate返回Product和子集,如果dataLines只有dataLines == someValue

core-data nspredicate nsfetchedresultscontroller nsfetchrequest ios

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

避免在核心数据提取上出现重复结果

我有一个CoreDataTableViewController的子类(由斯坦福大学的人做的UITAbleViewController圆的子类,用于链接CoreData和TableViews).在这个类上,我想执行一个fecth,通过一个名为"definition"的属性进行排序,执行它的代码如下:

- (void)setupFetchedResultsController{


    NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:self.entity];

    request.propertiesToFetch=[NSArray arrayWithObject:@"definition"];
    request.returnsDistinctResults=YES;

    NSPredicate *predicate1 = [NSPredicate predicateWithFormat:@"%K != nil", @"definition"]; 
    NSPredicate *predicate2 = [NSPredicate predicateWithFormat:@"%K != ''", @"definition"];
    NSPredicate *predicate3=  [NSPredicate predicateWithFormat:@"%K contains[cd] %@", @"definition", self.seachBar.text];

    NSArray *prepredicateArray;

    if ([self.seachBar.text length]) {
         prepredicateArray = [NSArray arrayWithObjects:predicate1, predicate2, predicate3,nil];

    }else {
         prepredicateArray = [NSArray arrayWithObjects:predicate1, predicate2,nil];

    }

    request.predicate=[NSCompoundPredicate andPredicateWithSubpredicates:prepredicateArray];
    request.sortDescriptors = [NSArray arrayWithObject:[NSSortDescriptor sortDescriptorWithKey:@"definition" ascending:YES ]];





    self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
                                                                        managedObjectContext:self.managedObjectContext
                                                                          sectionNameKeyPath:nil
                                                                                   cacheName:nil];




    [self performFetch];


}
Run Code Online (Sandbox Code Playgroud)

如果我理解正确,请设置request.returnsDistinctResults = YES; 应避免重复获取.但它不起作用,我看到这个属性值的重复.

那里有什么我想念的吗?我很欣赏那里的一些指点.先感谢您. …

xcode core-data nspredicate nsfetchrequest nsmanagedobject

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

如何根据多个Core Data属性中的计算值进行排序

我正在尝试为核心数据获取请求创建排序描述符,该描述符将获取按计算值排序的对象(例如,两个或更多属性的总和).这可能吗?提前致谢.

core-data nssortdescriptor nsfetchrequest ios

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

在iOS 7中修改NSFetchedResultsController fetchRequest

我找到了这个答案:https://stackoverflow.com/a/4861732/1486928

我正在尝试这样做,但它不会让我分配一个新创建NSFetchRequest的文档,它说:

@property(非原子,只读)NSFetchRequest*fetchRequest

但在下一行中它说:

特殊注意事项:如果要修改提取请求,则必须遵循"提取请求"中描述的步骤.

那是哪个,我是否可以修改它:/?这个属性非常令人困惑,readonly他们说我们可以修改它:(

core-data nsfetchedresultscontroller nsfetchrequest ios

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

如何在NSFetchedResultsController中向单个fetchrequest添加两个单独的不相关谓词

我有一个简单的应用程序,它有一个表视图控制器执行基于fetchRequest的NSFetchedResultsController,我的fetchRequest有,或者需要有两个完全独立的独立谓词.

一个用于在searchBar中搜索,一个用于在实际表视图中显示信息.

当我同时活动时,只有一个有效.

这是谓词:

if ([self.personSearchBar.text length] > 0)
{
    NSPredicate *personPredicate = [NSPredicate predicateWithFormat:@"ANY name CONTAINS[c] %@", self.personSearchBar.text]; 
    [fetchRequest setPredicate:personPredicate];
}

NSPredicate *p = [NSPredicate predicateWithFormat:@"transactions.whoBy.@count !=0"];
[fetchRequest setPredicate:p];
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,有两个独立的谓词,但两者都需要处于活动状态并正常工作,因为现在处于这种状态,搜索实际上并不起作用,但如果我注释掉NSPredicate*p,它就会.

我应该使用复合谓词吗?如果是,我如何将这些独立谓词串在一起?

core-data objective-c nspredicate nsfetchrequest ios

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

如何在获取之前更改托管对象类名称

我有一个使用CoreData的Swift应用程序.我List用class 创建了实体MyAppTarget.List.在.xcdatamodeld文件中正确配置了所有内容.为了从持久存储中获取我的实体,我正在使用NSFetchedResultsController:

let fetchRequest = NSFetchRequest()
fetchRequest.entity = NSEntityDescription.entityForName("List", inManagedObjectContext: managedObjectContext)
fetchRequest.sortDescriptors = [ NSSortDescriptor(key: "name", ascending: true) ]
let fetchedResultsController = NSFetchedResultsController(fetchRequest: fetchRequest, managedObjectContext: managedObjectContext, sectionNameKeyPath: nil, cacheName: "ListFetchedResultsControllerCache")
Run Code Online (Sandbox Code Playgroud)

并且它像预期的那样工作,MyAppTarget.List在获取时返回对象数组.

但是,我想在另一个目标中使用它进行单元测试.我添加了ListMyUnitTestTarget,所以我可以在单元测试目标中访问它.问题是获取的结果控制器返回MyAppTarget.List对象,而不是MyUnitTestTarget.List对象.为了使List实体可测试,我必须公开它以及我需要使用的所有方法,我想避免这种情况.

我试图更改managedObjectClassName属性NSEntityDescription:

fetchRequest.entity.managedObjectClassName = "MyUnitTestTarget.List"
Run Code Online (Sandbox Code Playgroud)

但它会产生异常:

失败:捕获"NSInternalInconsistencyException","无法修改不可变模型".

文件指出,

[...]一旦使用了描述(当它所属的托管对象模型与持久性存储协调器相关联时),它就不能(实际上不能)被更改.[...]如果需要修改正在使用的模型,请创建副本,修改副本,然后使用旧模型丢弃对象.

不幸的是,我不知道如何实现这个流程.我想知道在获取实体之前是否有办法在运行时更改托管对象类名NSFetchedResultsController

core-data nsfetchedresultscontroller nsfetchrequest nsmanagedobject swift

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

NSPredicate一个布尔值

我在一个实体上有一个布尔attr,生成的代码是:

@property (nonatomic, retain) NSNumber * countdownMode;
@dynamic countdownMode;
Run Code Online (Sandbox Code Playgroud)

实体保存为:

score.countdownMode = @(YES);
Run Code Online (Sandbox Code Playgroud)

fetchRequest具有以下谓词:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == YES"];
Run Code Online (Sandbox Code Playgroud)

由于某种原因,获取永远不会返回任何东西..任何想法?删除谓词后,将获取行.在调试器中我可以看到countdownMode是1.我也试过这些没有成功:

fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %@", @YES];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"countdownMode == %d", YES];
Run Code Online (Sandbox Code Playgroud)

这似乎应该很简单,但它不会返回任何结果.感谢帮助.

core-data objective-c nspredicate nsfetchrequest

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

如何将新Object插入实体并设置该对象与另一个实体的现有对象的关系?

我的问题可以应用于任何类型的关系,但在我的情况下,我有一对多.

假设我有一个包含3个对象的实体人:

布赖恩

彼得

斯科特

每个人都可以有很多工作.所以我有一个当前为空的Job实体.两个实体的反向关系已经创建,并且效果很好.只是为了清楚我的问题是没有插入一个对象(我知道该怎么做),是插入的具体方式.

所以更具体的问题是:

如何将一个或多个作业对象插入作业实体并将其中的每一个分配给Core Data中当前存在的一个Person对象?

core-data nsfetchrequest ios swift swift3

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