在Core Data中按属性获取对象 [英] Fetch object by property in Core Data

查看:85
本文介绍了在Core Data中按属性获取对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的iPhone项目中,我想写一个函数,检查在我的Core Data ManagedObjectContext中有一个对象的某个属性的给定值,如 some_property

In my iPhone project, I want to write a function that checks wether there's an object in my Core Data ManagedObjectContext with a given value for a certain property, say some_property.

如果已经有一个对象 some_property == 12 ,我想让函数返回对象,否则,我想创建对象,或者至少返回 nil

If there's already an object with some_property == 12, I want the function to return the object, otherwise, I want to create the object, or at least return nil.

我该怎么做?

推荐答案

以下代码段显示了如何检索与特定谓词匹配的对象。如果没有这样的对象,该代码段显示如何创建一个新对象,保存并返回。

The following snippet shows how to retrieve the objects matching a specific predicate. If there are no such objects, the snippet shows how to create a new object, save it and return it.

    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"YourEntityName" inManagedObjectContext:managedObjectContext];
    [request setEntity:entity];
    // retrive the objects with a given value for a certain property
    NSPredicate *predicate = [NSPredicate predicateWithFormat: @"property == %@", value];
    [request setPredicate:predicate];

    // Edit the sort key as appropriate.
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"yourSortKey" ascending:YES];
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
    [request setSortDescriptors:sortDescriptors];



    // Edit the section name key path and cache name if appropriate.
    // nil for section name key path means "no sections".
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];
    aFetchedResultsController.delegate = self;

    NSError *error = nil;
    NSArray *result = [managedObjectContext executeFetchRequest:request error:&error];

    [request release];
    [sortDescriptor release];
    [sortDescriptors release];


    if ((result != nil) && ([result count]) && (error == nil)){
         return [NSMutableArray arrayWithArray:result];
    }
    else{
        YourEntityName *object = (YourEntityName *) [NSEntityDescription insertNewObjectForEntityForName:@"YourEntityName" inManagedObjectContext:self.managedObjectContext];
            // setup your object attributes, for instance set its name
            object.name = @"name"

            // save object
            NSError *error;
            if (![[self managedObjectContext] save:&error]) {
             // Handle error
             NSLog(@"Unresolved error %@, %@", error, [error userInfo]);

            }

            return object;

   }

这篇关于在Core Data中按属性获取对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆