Magical Record DAO

This is magical record 2nd posts.
The first post is Magical Record First Step.

Simple Example

.xcdatamodeld

Country

  • code Integer32
  • key String

Create

-(Country *)createCountry:(int)code key:(NSString *)key {
    Country *country = [Country MR_createEntity];
    country.code = [NSNumber numberWithInt:code];
    country.key = key;
    return country;
}

Usage

CountryDAO *cdao = [[CountryDAO alloc] init];
[cdao createCountry:1 key:@"goodtimebiz.us"];
[[NSManagedObjectContext MR_defaultContext] MR_saveToPersistentStoreAndWait];

This example uses general context and MR_createEntity.
Very easy?
MR_saveToPersistentStoreAndWait is to commit.

Read

Find all

-(NSArray *)findAll {
    return [Country MR_findAll];
}

Find by attr

-(Country *)findByCode:(int)code {
    return [Country MR_findFirstByAttribute:@"code" withValue:[NSNumber numberWithInt:code]];
}

This is attribute search.

Truncate

To delete one item or several items, we use MR_deleteAllMatchingPredicate
To delete all(a lot of items), use trancate like MySQL.

-(void)deleteAll {
    [Country MR_truncateAll];
}

NSPredicate

To make a bit difficult SQL, we use NSPredicate in CoreData.
It is same as Magical Record.

.xcdatamodeld

Item

  • from Date
  • name String
  • to Date
  • uid String

Delete

-(void)deleteByUid:(NSString *)uid {
    
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"uid == %@", uid];
    [Item MR_deleteAllMatchingPredicate:predicate];
}

To add condition, we use NSPredicate.

Predicate(condition)


-(NSArray *)findBetweenFromTo:(NSDate *)from to:(NSDate *)to {
NSPredicate *predicate = [NSPredicate predicateWithFormat:@”(from >= %@) AND (to <= %@)", from, to]; return [Item MR_findAllSortedBy:@"from" ascending:YES withPredicate:predicate]; } [/cpp]