一个简单的Core Data管理器,易于设置和获取。Kern允许使用简单的获取方法创建一个简单的上下文。它在功能方面远不如MagicalRecord和ObjectiveRecord等库强大。它服务于一个非常简单的目的,在同一个上下文中(具有后台处理)存储和获取数据。
它从上述项目的作品中借用了大量内容,但将其精简到其实际用途的最小化。我对它的原创性不做任何声明(称之为混合体)。
包含的一个原始的概念/实现包含了数据映射。它允许给定的NSManagedObjectModel
指定一组映射属性(以及数据类型),然后使用这些属性轻松保存更改。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Setup Kern
[Kern setupAutoMigratingCoreDataStack];
return YES;
}
User *jimmy = [User createEntity]; //create an empty entity
jimmy.firstName = @"Jimmy";
jimmy.lastName = @"James";
jimmy.luckyNumber = @3;
User *doogie = [User createEntity:@{@"firstName": @"Doogie", @"lastName": @"Howser", @"luckyNumber": @7}];
User *george = [User createEntity:@{"firstName": @"George", @"lastName": @"Bluth", @"luckyNumber": @13}];
User *michael = [User createEntity:@{"firstName": @"Michael", @"lastName": @"Bluth", @"luckyNumber": @13}];
User *georgeMichael = [User createEntity:@{"firstName": @"George Michael", @"lastName": @"Bluth", @"luckyNumber": @9}];
User *buster = [User createEntity:@{"firstName": @"Buster", @"lastName": @"Bluth"}]; // not lucky
User *oscar = [User createEntity:@{"firstName": @"Oscar", @"lastName": @"Bluth"}]; // not lucky
[Kern saveContext]; // save the whole context
User *ron = [User createEntity:@{"firstName": @"Ron", @"lastName": @"Swanson", @"luckyNumber": @11}];
[ron saveEntity]; // save a single instance
简单的强大的查找/排序选项。
NSArray *all = [User findAll]; // um, all the records
// find and sort by luckyNumber
NSArray *sorted = [User findAllSortedBy:@"luckyNumber"]; // ascending sort if not specified
// find and sort by luckyNumber (dictionary form)
sorted = [User findAllSortedBy:@{@"luckyNumber": @"asc"}];
// find and sort by luckyNumber (plain old NSSortDescriptor)
sorted = [User findAllSortedBy:[NSSortDescriptor sortDescriptorWithKey:@"luckyNumber" ascending:YES]];
// sort by lastName descending, luckyNumber ascending
sorted = [User findAllSortedBy:@"lastName desc,luckyNumber"];
// sort by lastName descending, luckyNumber ascending (dictionary form)
sorted = [User findAllSortedBy:@[@{@"lastName": "DESC"}, @{@"luckyNumber": @"ASC"}]];
// sort by lastName descending, luckyNumber ascending (sort descriptors)
NSArray *descriptors = [NSArray arrayWithObjects:
[NSSortDescriptor sortDescriptorWithKey:@"lastName" ascending:NO],
[NSSortDescriptor sortDescriptorWithKey:@"luckyNumber" ascending:YES],
nil];
sorted = [User findAllSortedBy:descriptors];
// limiting
NSArray *top3Luckiest = [User findAllSortedBy:@"luckyNumber desc" withLimit:3];
// conditionals (where)
// find all the bluth's
NSArray *allBluths = [User findAllWhere:@"lastName ==[cd] 'bluth'")];
// find all the bluths
allBluths = [User findAllWhere:@"lastName ==[cd] %@", @"bluth"];
// find all the bluths with a luckyNumber of 13
allBluths = [User findAllWhere:@"lastName ==[cd] %@ AND luckyNumber == %@", @"bluth", @13];
// find all the bluths with a luckyNumber of 13 (dictionary form)
allBluths = [User findAllWhere:@{@"lastName": @"Bluth", @"luckyNumber": @13}];
// find all the bluths with a luckyNumber of 13 (plain old NSPredicate)
allBluths = [User findAllWhere:[NSPredicate predicateWithFormat:@"lastName ==[cd] %@ AND luckyNumber == %@", @"bluth", @13]];
// find, sort, and limit
// find all sorted by luckyNumber, limited to top 2, where lastName is bluth
NSArray *topTwoBluths = [User findAllSortedBy:@"luckyNumber desc" withLimit:2 where:@"lastName ==[cd] %@", @"bluth"]];
// fetching with NSFetchedResultsController
// fetch all sorted by lastName, luckyNumber DESC and grouped by lastName
NSFetchedResultsController *frc = [User fetchAllSortedBy:@"lastName, luckyNumber DESC" groupedBy:@"lastName" where:@"lastName NOT IN %@", @[@"Howser", @"James"]];
frc.delegate = self; // if you want to control the delegate
NSError *error = nil;
[frc performFetch:&error]; // perform the fetch
if (error) {
NSLog(@"Uh oh.");
}
// See the included tests for more details
// See the headers for other fetching variants
// TODO: Describe the process here. (For now, you can look at the headers, example app, and tests.)
它需要ARC和iOS 7+。它仅适用于iOS。好吧,它可能在旧版本/其他OS要求上运行,但这只是它构建/测试过的地方。
Dustin Steele
Kern在MIT许可证下可用。有关更多信息,请参阅LICENSE文件。