我可以使用以下代码轻松地在Core Data中获取对象的ID:
NSManagedObjectID *moID = [managedObject objectID];
Run Code Online (Sandbox Code Playgroud)
但是,是否有办法通过为对象提供特定的对象ID来将对象从核心数据存储中取出?我知道我可以通过使用NSFetchRequest来实现这一点,如下所示:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(objectID = %@)", myObjectID];
[fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
但是,我想以不启动自己的获取请求的方式执行此操作.有任何想法吗?
我有一个NSFetchRequest返回对象的属性NSDictionaryResultType.是否有可能在这个字典中获取对象的ObjectId?否则,我将需要运行返回类型的查询,NSManagedObjectResultType对于大量返回的项目,返回类型要慢得多.
好的我有一个基本的iPad应用程序,要求用户提供5个搜索/过滤条件.根据这些数据,我需要转到我的核心数据db,并提取符合该条件的任何托管对象.看起来我需要在同一个请求中应用多个谓词,这可能吗?或者我可以写一个非常长的花哨的谓词?有多个要求?我应该怎么做?
通过获取请求获取所有实体是不是一个好主意,然后循环遍历每个数组并抓住我找到的符合我搜索条件的任何对象?
请指教!
我正在尝试将我NSFetchRequest的核心数据设置为检索实体中特定属性的唯一值.即
具有以下信息的实体:
name | rate | factor |
_______|______|________|
John | 3.2 | 4 |
Betty | 5.5 | 7 |
Betty | 2.1 | 2 |
Betty | 3.1 | 2 |
Edward | 4.5 | 5 |
John | 2.3 | 4 |
Run Code Online (Sandbox Code Playgroud)
我如何设置返回数组的请求:John,Betty,Edward?
我正在使用一个使用Core Data和NSManagedObjects来填充UITableView的应用程序.我的应用程序中只有一个类叫做Event.我已经创建了以下自定义实例方法Event:
- (BOOL)isExpired {
return ([[self.endOn dateAtEndOfDay] timeIntervalSinceNow] < 0);
}
Run Code Online (Sandbox Code Playgroud)
我想将UITableView显示Event对象的内容限制为仅过期的事件 - 即isExpired返回的事件YES.我试图通过添加NSPredicate到NSFetchRequest:
NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary * bindings) {return([evaluatedObject isExpired]);}];
[fetchRequest setPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
但是我得到了错误:*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Problem with subpredicate BLOCKPREDICATE(0x272ac)'
***.这是否意味着您不能将块谓词与NSFetchRequest一起使用?或者我刚构建它不正确?
谢谢!
core-data objective-c nsfetchedresultscontroller nsfetchrequest
在iOS 10中,CoreData团队为NSManagedObject添加了一个新的"fetchRequest"方法.它看起来像这样:
public class func fetchRequest() -> NSFetchRequest<NSFetchRequestResult>
Run Code Online (Sandbox Code Playgroud)
根据我的理解,我们可以将其替换为:
let request = NSFetchRequest<MyEntity>(entityName: "MyEntity")
Run Code Online (Sandbox Code Playgroud)
有了这个:
let request = MyEntity.fetchRequest()
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试做出这样一个简单的请求时:
let request = MyEntity.fetchRequest()
do {
results = try request.execute()
} catch let error {
print("failed to fetch coffee object: \(error)")
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
错误域= NSCocoaErrorDomain代码= 134060"(null)"UserInfo = {message =在没有范围内的NSManagedObjectContext的情况下无法获取}
所以,显然错误是说我需要将NSManagedObjectContext带入范围.我一直在寻找示例,但似乎可以找到如何使用新API功能执行请求的完整示例.
使用最新的Core Data API功能,如何进行简单的提取请求?基本问题是如何将NSmanagedObjectCotnext带入范围.
我应该注意到,我能够使用传统语法成功发出请求.
核心数据在NSManagedObjectContext类中提供方法"executeFetchRequest",我们可以使用它从表中获取数据并以任何方式使用它.
现在有另一种方法,使用NSFetchedResultsController并将其提供给UITableView以从表中获取和数据.
我现在的问题是:
哪种方式更快?,我的意思是性能明智,哪一个最好?
NSFetchedResultsController是否仅与UITableViews一起使用?
NSFetchedResultsController的优点和缺点是什么?
最后一点,"为什么我们使用NSFetchedResultsController",什么使它比任何其他方式更好.
我int32在Core Data数据库中有一个属性.我用它int作为一个enum位字段.
是否可以NSPredicate根据此int的二进制值创建查询项?有点像@"bitFieldAttribute & 0x0001"?
我也想知道这是否可以使用二进制类型属性?
我试图用一个UISearchBar查询的多个属性NSManagedObject
我有一个NSManagedObject叫Person,每个人都有一个name和socialSecurity财产.现在我的代码可以为其中一个属性或另一个属性执行搜索(获取),但不能同时执行这两个属性.
- (void) performFetch
{
[NSFetchedResultsController deleteCacheWithName:@"Master"];
// Init a fetch request
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"MainObject" inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Apply an ascending sort for the color items
//NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"Term" ascending:YES selector:nil];
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"fullName" ascending:YES selector:@selector(caseInsensitiveCompare:)];
NSArray *descriptors = [NSArray arrayWithObject:sortDescriptor];
[fetchRequest setSortDescriptors:descriptors];
// Recover query
NSString *query = self.searchDisplayController.searchBar.text;
//if (query …Run Code Online (Sandbox Code Playgroud) 我如何使用托管对象的date属性对NSFetchRequest进行排序.那么它创建一个日期按顺序排列的数组?
这是我到目前为止的代码......
var request : NSFetchRequest = NSFetchRequest(entityName: "History");
request.predicate = NSPredicate(format: "counts = %@", true)
request.sortDescriptors = [???] <- What should I put here?
var results : [NSManagedObject] = context.executeFetchRequest(request, error: nil) as [NSManagedObject]
Run Code Online (Sandbox Code Playgroud) nsfetchrequest ×10
core-data ×9
ios ×5
iphone ×4
nspredicate ×3
bit-fields ×1
cocoa ×1
macos ×1
objective-c ×1
swift ×1
swift3 ×1
xcode8-beta2 ×1