标签: nsfetchrequest

如何从特定的对象ID获取Core Data对象?

我可以使用以下代码轻松地在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)

但是,我想以不启动自己的获取请求的方式执行此操作.有任何想法吗?

macos cocoa core-data nsfetchrequest ios

117
推荐指数
2
解决办法
7万
查看次数

核心数据,当NSFetchRequest返回NSDictionaryResultType时如何获取NSManagedObject的ObjectId?

我有一个NSFetchRequest返回对象的属性NSDictionaryResultType.是否有可能在这个字典中获取对象的ObjectId?否则,我将需要运行返回类型的查询,NSManagedObjectResultType对于大量返回的项目,返回类型要慢得多.

iphone core-data nsfetchrequest ios

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

我可以将多个谓词应用于NSFetchRequest吗?手动解析我的结果会更好吗?

好的我有一个基本的iPad应用程序,要求用户提供5个搜索/过滤条件.根据这些数据,我需要转到我的核心数据db,并提取符合该条件的任何托管对象.看起来我需要在同一个请求中应用多个谓词,这可能吗?或者我可以写一个非常长的花哨的谓词?有多个要求?我应该怎么做?

通过获取请求获取所有实体是不是一个好主意,然后循环遍历每个数组并抓住我找到的符合我搜索条件的任何对象?

请指教!

iphone core-data nspredicate nsfetchrequest

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

CoreData获取Attribute的不同值

我正在尝试将我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 nsfetchrequest ios

31
推荐指数
4
解决办法
3万
查看次数

NSFetchRequest和predicateWithBlock

我正在使用一个使用Core Data和NSManagedObjects来填充UITableView的应用程序.我的应用程序中只有一个类叫做Event.我已经创建了以下自定义实例方法Event:

- (BOOL)isExpired {
    return ([[self.endOn dateAtEndOfDay] timeIntervalSinceNow] < 0);
}
Run Code Online (Sandbox Code Playgroud)

我想将UITableView显示Event对象的内容限制为仅过期的事件 - 即isExpired返回的事件YES.我试图通过添加NSPredicateNSFetchRequest:

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

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

如何使用NSManagedObject的新fetchRequest函数创建获取请求?

在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带入范围.

我应该注意到,我能够使用传统语法成功发出请求.

core-data nsfetchrequest ios swift3 xcode8-beta2

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

为什么要使用NSFetchedResultsController?

核心数据在NSManagedObjectContext类中提供方法"executeFetchRequest",我们可以使用它从表中获取数据并以任何方式使用它.

现在有另一种方法,使用NSFetchedResultsController并将其提供给UITableView以从表中获取和数据.

我现在的问题是:

  • 哪种方式更快?,我的意思是性能明智,哪一个最好?

  • NSFetchedResultsController是否仅与UITableViews一起使用?

  • NSFetchedResultsController的优点和缺点是什么?

  • 最后一点,"为什么我们使用NSFetchedResultsController",什么使它比任何其他方式更好.

iphone core-data nsfetchedresultscontroller nsfetchrequest

22
推荐指数
1
解决办法
3134
查看次数

如何在Core Data中使用二进制标志?

int32在Core Data数据库中有一个属性.我用它int作为一个enum位字段.

是否可以NSPredicate根据此int的二进制值创建查询项?有点像@"bitFieldAttribute & 0x0001"

我也想知道这是否可以使用二进制类型属性?

iphone core-data nspredicate nsfetchrequest bit-fields

21
推荐指数
3
解决办法
4314
查看次数

iOS CoreData NSPredicate一次查询多个属性

我试图用一个UISearchBar查询的多个属性NSManagedObject 我有一个NSManagedObjectPerson,每个人都有一个namesocialSecurity财产.现在我的代码可以为其中一个属性或另一个属性执行搜索(获取),但不能同时执行这两个属性.

- (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)

core-data nspredicate nsfetchrequest ios

20
推荐指数
4
解决办法
2万
查看次数

NSSortDescriptor在Swift中使用NSDate进行排序

我如何使用托管对象的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)

nssortdescriptor nsfetchrequest swift

16
推荐指数
1
解决办法
8027
查看次数