Skip to content

Instantly share code, notes, and snippets.

@edom18
Last active November 6, 2018 08:27
Show Gist options
  • Save edom18/8799638 to your computer and use it in GitHub Desktop.
Save edom18/8799638 to your computer and use it in GitHub Desktop.
[Objective-C] CoreDataを使う ref: https://qiita.com/edo_m18/items/8bc7615eb2f6d546705d
- (NSURL *)applicationDocumentsDirectory
{
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
return url;
}
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"HogeModel" withExtention:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"HogeProj.splite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWitType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
//削除対象のフェッチ情報を生成
NSFetchRequest *deleteRequest = [[NSFetchRequest alloc] init];
[deleteRequest setEntity:[NSEntityDescription entityForName:@"HogeData" inManagedObjectContext:managedObjectContext]];
[deleteRequest setIncludesPropertyValues:NO]; //managed object IDのみフェッチ
NSError *error = nil;
//生成したフェッチ情報からデータをフェッチ
NSArray *results = [managedObjectContext executeFetchRequest:deleteRecest error:&error];
//[deleteRequest release]; //ARCオフの場合
//フェッチしたデータを削除処理
for (NSManagedObject *data in results) {
[managedObjectContext deleteObject:data];
}
NSError *saveError = nil;
//削除を反映
[managedObjectContext save:&saveError];
//fetch設定を生成
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([HogeData class])];
//sort条件を設定
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//ARCオフの場合はreleaseする
//[sortDescriptor release];
//[sortDescriptors release];
//fetch設定を元に、managedObjectContextからデータを取得
//返り値は`NSManagedObject`の配列になる
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
for (NSManagedObject *data in results) {
//do something.
}
- (NSManagedObjectModel *)managedObjectModel
{
if (_managedObjectModel != nil) {
return _managedObjectModel;
}
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"HogeModel" withExtension:@"momd"];
_managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return _managedObjectModel;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (_persistentStoreCoordinator) {
return _persistentStoreCoordinator;
}
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"HogeProj.splite"];
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return _persistentStoreCoordinator;
}
- (NSManagedObjectContext *)managedObjectContext
{
if (_managedObjectContext != nil) {
return _managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
_managedObjectContext = [[NSManagedObjectContext alloc] init];
[_managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return _managedObjectContext;
}
//fetch設定を生成
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClass([HogeData class])];
//sort条件を設定
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:NO];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
//ARCオフの場合はreleaseする
//[sortDescriptor release];
//[sortDescriptors release];
//fetch設定を元に、managedObjectContextからデータを取得
//返り値は`NSManagedObject`の配列になる
NSArray *results = [self.managedObjectContext executeFetchRequest:fetchRequest error:nil];
for (NSManagedObject *data in results) {
//do something.
}
HogeData *hogeData = (HogeData *)[NSEntityDescription insertNewObjectForEntityForName:@"HogeData" inManagedObjectContext:managedObjectContext];
//削除対象のフェッチ情報を生成
NSFetchRequest *deleteRequest = [[NSFetchRequest alloc] init];
[deleteRequest setEntity:[NSEntityDescription entityForName:@"HogeData" inManagedObjectContext:managedObjectContext]];
[deleteRequest setIncludesPropertyValues:NO]; //managed object IDのみフェッチ
NSError *error = nil;
//生成したフェッチ情報からデータをフェッチ
NSArray *results = [managedObjectContext executeFetchRequest:deleteRecest error:&error];
//[deleteRequest release]; //ARCオフの場合
//フェッチしたデータを削除処理
for (NSManagedObject *data in results) {
[managedObjectContext deleteObject:data];
}
NSError *saveError = nil;
//削除を反映
[managedObjectContext save:&saveError];
- (NSURL *)applicationDocumentsDirectory
{
NSURL *url = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
return url;
}
// Entityを指定してFetchRequestを作る
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:NSStringFromClassName(anEntityClass.class)];
request.includesSubentities = NO;
NSError *error = nil;
AppDelegate *delegate = UIApplication.sharedApplication.deleate;
// NSManagedObjectContextから、生成したリクエストを元に件数だけを取得
// (NSManagedObjectContextは適宜定義されているものに置き換えてください)
NSInteger count = [delegate.managedObjectContext countForFetchRequest:request error:&error];
// もし見つからなければ0件
if (count == NSNotFound) {
return 0;
}
return count;
HogeData *hogeData = (HogeData *)[NSEntityDescription insertNewObjectForEntityForName:@"HogeData" inManagedObjectContext:managedObjectContext];
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment