假设我有一个CoreData实体"Point",它有两个属性x和y(两个NSNumber).
NSPredicate如何让我找到最接近的点a,b?距离= sqrt((xa)(xa)+(yb)(yb))
虽然我可以定义一个计算到预定义点的距离的瞬态属性,但我无法看到在启动fetchrequest时如何以编程方式更改该点.
任何帮助将不胜感激.
我正在尝试创建一个NSPredicate(用于a NSFetchRequest中的核心数据NSFetchedresultsController),根据当前时间过滤记录.
不是谓词创建的时间:
[NSPredicate predicateWithFormat:@"(criticalDate < %@)", [NSDate date]]
但是评估谓词的时间,因为我想避免一直使用新的fetchRequests更新fetchedResultsController.我正在寻找的东西(但我自己找不到)是这样的:
[NSPredicate predicateWithFormat:@"(criticalDate < ????)"]
这是为iPhone,这意味着now()不支持,所以我想无论解决方案是什么,它将是一种黑客攻击.
提前致谢
我正在努力使用Core Data和NSFetchedResultsController.
我的数据模型如下所示:
Product与一对多的关系称为dataLines.该dataLine实体具有属性名称theWeek.
我想抓住所有Product地方dataLines.theWeek == someValue.使用子查询可以轻松完成此操作.但是这会返回所有dataLines.是否有可能创建一个NSPredicate返回Product和子集,如果dataLines只有dataLines == someValue?
core-data nspredicate nsfetchedresultscontroller nsfetchrequest ios
我有一个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; 应避免重复获取.但它不起作用,我看到这个属性值的重复.
那里有什么我想念的吗?我很欣赏那里的一些指点.先感谢您. …
我正在尝试为核心数据获取请求创建排序描述符,该描述符将获取按计算值排序的对象(例如,两个或更多属性的总和).这可能吗?提前致谢.
我找到了这个答案:https://stackoverflow.com/a/4861732/1486928
我正在尝试这样做,但它不会让我分配一个新创建NSFetchRequest的文档,它说:
@property(非原子,只读)NSFetchRequest*fetchRequest
但在下一行中它说:
特殊注意事项:如果要修改提取请求,则必须遵循"提取请求"中描述的步骤.
那是哪个,我是否可以修改它:/?这个属性非常令人困惑,readonly他们说我们可以修改它:(
我有一个简单的应用程序,它有一个表视图控制器执行基于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,它就会.
我应该使用复合谓词吗?如果是,我如何将这些独立谓词串在一起?
我有一个使用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在获取时返回对象数组.
但是,我想在另一个目标中使用它进行单元测试.我添加了List类MyUnitTestTarget,所以我可以在单元测试目标中访问它.问题是获取的结果控制器返回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
我在一个实体上有一个布尔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)
这似乎应该很简单,但它不会返回任何结果.感谢帮助.
我的问题可以应用于任何类型的关系,但在我的情况下,我有一对多.
假设我有一个包含3个对象的实体人:
布赖恩
彼得
斯科特
每个人都可以有很多工作.所以我有一个当前为空的Job实体.两个实体的反向关系已经创建,并且效果很好.只是为了清楚我的问题是没有插入一个对象(我知道该怎么做),是插入的具体方式.
所以更具体的问题是:
如何将一个或多个作业对象插入作业实体并将其中的每一个分配给Core Data中当前存在的一个Person对象?
core-data ×10
nsfetchrequest ×10
nspredicate ×6
ios ×5
objective-c ×3
swift ×2
cocoa ×1
sqlite ×1
swift3 ×1
xcode ×1