代码之家  ›  专栏  ›  技术社区  ›  winsmith

在核心数据中按属性获取对象

  •  10
  • winsmith  · 技术社区  · 17 年前

    在我的iPhone项目中,我想编写一个函数,检查我的Core Data Managed ObjectContext中是否有某个属性具有给定值的对象,比如 some_property .

    some_property == 12 nil .

    2 回复  |  直到 17 年前
        1
  •  19
  •   Massimo Cafaro    17 年前

        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;
    
       }
    
        2
  •  2
  •   Jesse Armand    16 年前

    // get the names to parse in sorted order
    NSArray *employeeIDs = [[listOfIDsAsString componentsSeparatedByString:@"\n"]
            sortedArrayUsingSelector: @selector(compare:)];
    
    // create the fetch request to get all Employees matching the IDs
    NSFetchRequest *fetchRequest = [[[NSFetchRequest alloc] init] autorelease];
    [fetchRequest setEntity:
            [NSEntityDescription entityForName:@"Employee" inManagedObjectContext:aMOC]];
    [fetchRequest setPredicate: [NSPredicate predicateWithFormat: @"(employeeID IN %@)", employeeIDs]];
    
    // make sure the results are sorted as well
    [fetchRequest setSortDescriptors: [NSArray arrayWithObject:
            [[[NSSortDescriptor alloc] initWithKey: @"employeeID"
                    ascending:YES] autorelease]]];
    // Execute the fetch
    NSError *error;
    NSArray *employeesMatchingNames = [aMOC
            executeFetchRequest:fetchRequest error:&error];