Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 您可以使用两种方法访问数据库。 重要提示:在viewController中包含该语句 “导入CoreData” A.调用seed()-->将值插入db/entity B调用fetch()-->从db/entity获取值_Ios_Core Data - Fatal编程技术网

Ios 您可以使用两种方法访问数据库。 重要提示:在viewController中包含该语句 “导入CoreData” A.调用seed()-->将值插入db/entity B调用fetch()-->从db/entity获取值

Ios 您可以使用两种方法访问数据库。 重要提示:在viewController中包含该语句 “导入CoreData” A.调用seed()-->将值插入db/entity B调用fetch()-->从db/entity获取值,ios,core-data,Ios,Core Data,///////seed()-->def //fetch()def 对于Swift 3: 文件->新建文件->核心数据->模型以创建模型 有关如何实施的更多信息,请参阅此部分。示例编码视图1 +(void) insetPlusUpdate:(NSDictionary *)dataa { NSManagedObjectContext * context; if (![[NSThread currentThread] isMainThread]) { contex

///////seed()-->def

//fetch()def


对于Swift 3:

文件->新建文件->核心数据->模型以创建模型

有关如何实施的更多信息,请参阅此部分。

示例编码视图1
+(void) insetPlusUpdate:(NSDictionary *)dataa {

    NSManagedObjectContext * context;

    if (![[NSThread currentThread] isMainThread]) {

        context = [[NSManagedObjectContext alloc] init];

        [context setPersistentStoreCoordinator:[APP_DELEGATE persistentStoreCoordinator]];
    } else {

        context = [APP_DELEGATE managedObjectContext];
    }

    NSFetchRequest * request = [[NSFetchRequest alloc] init];

    NSEntityDescription * entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:context];

    [request setEntity:entity];

    NSPredicate * check = [NSPredicate predicateWithFormat:@"attribute == %@", Dict[@"key"]];

    [request setPredicate:check];

    NSError * error = nil;

    if ([context countForFetchRequest:request error:&error] == 0) {

Entity.attribute = @"";

    } else {


        NSArray * array = [context executeFetchRequest:request error:&error];

        EntityName * entity = [array firstObject];

  Entity.attribute = @"";

    }

}

+(NSString *)fetch:(NSString *)feed_id{

    NSManagedObjectContext * context;

    if(![[NSThread currentThread] isMainThread]){

        context = [[NSManagedObjectContext alloc] init];

        [context setPersistentStoreCoordinator:[APP_DELEGATE persistentStoreCoordinator]];

    } else {

        context = [APP_DELEGATE managedObjectContext];

    }

    NSFetchRequest * request = [[NSFetchRequest alloc] init];

    NSEntityDescription * entity = [NSEntityDescription entityForName:@"ENTITYNAME" inManagedObjectContext:context];

    [request setEntity:entity];

   NSPredicate * check = [NSPredicate predicateWithFormat:@"attribute == %@", Dict[@"key"]];

    [request setPredicate:check];

    NSError * error = nil;

    if ([context countForFetchRequest:request error:&error] > 0) {

        NSArray * array = [context executeFetchRequest:request error:&error];

        ENTITYNAME * fetchData = [array firstObject];

        NSString * string = fetchData.attribte[@"key"];

        return string;
    }

    return nil;
}


+(BOOL)delete{

    NSManagedObjectContext * context;

    if (![[NSThread currentThread] isMainThread]) {

        context = [[NSManagedObjectContext alloc] init];

        [context setPersistentStoreCoordinator:[APP_DELEGATE persistentStoreCoordinator]];

    } else {

        context = [APP_DELEGATE managedObjectContext];

    }

    NSFetchRequest * request = [[NSFetchRequest alloc] init];

    NSEntityDescription * entity = [NSEntityDescription entityForName:@"ENTITYNAME" inManagedObjectContext:context];

    [request setEntity:entity];

    NSError *error = nil;

    NSBatchDeleteRequest *deleteRequest = [[NSBatchDeleteRequest alloc] initWithFetchRequest: request];

    @try{

        [context executeRequest:deleteRequest error:&error];
        if([context save:&error]){

            NSLog(@"Deleted");

            return [context save:&error];

        }
        else{

            return [context save:&error];
        }

    }
    @catch(NSException *exception){

        NSLog(@"failed %@",exception);
        return [context save:&error];
    }    


}
示例详细视图 保存按钮 视图.h

  #import <UIKit/UIKit.h>
  #import <CoreData/CoreData.h>

    @interface ViewController :  
    UIViewController<UITableViewDataSource,UITableViewDelegate>

   @property (weak, nonatomic) IBOutlet UITableView *coreDataList;
   - (IBAction)addBtnClick:(id)sender;
   @property (strong, nonatomic) NSMutableArray *dataList;
   @end
#导入
#进口
@界面视图控制器:
UIViewController
@属性(弱、非原子)IBUITableView*coreDataList;
-(iAction)addb单击:(id)发件人;
@属性(强,非原子)NSMutableArray*数据列表;
@结束
细节.h

  #import <UIKit/UIKit.h>
  #import <CoreData/CoreData.h>

 @interface DetailViewController : UIViewController<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *nameTxt;
@property (weak, nonatomic) IBOutlet UITextField *mobileTxt;
@property (weak, nonatomic) IBOutlet UITextField *emailIdTxt;
 - (IBAction)saveBtnClick:(id)sender;
@property (strong,nonatomic) NSManagedObject *userData;

@end
#导入
#进口
@界面详细信息ViewController:UIViewController
@属性(弱、非原子)IBOutlet UITextField*nameTxt;
@属性(弱、非原子)IBUitextField*mobileTxt;
@属性(弱、非原子)IBOutlet UITextField*emailIdTxt;
-(iAction)保存单击:(id)发件人;
@属性(强,非原子)NSManagedObject*userData;
@结束
-(无效)视图加载{
[超级视图下载];
//加载视图后执行任何其他设置。
if(self.userData){
[self.nameTxt setText:[self.userData valueForKey:@“name”];
[self.mobileTxt setText:[self.userData]
valueForKey:@“mobileNumber”]];
[self.emailIdTxt setText:[self.userData valueForKey:@“email”];
[self.imgView setImage:[UIImage imageWithData:[self.userData]
valueForKey:@“imageView”]]];}
}
-(无效)未收到记忆警告{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
-(BOOL)textField应返回:(UITextField*)textField
{
[textField resignFirstResponder];
返回YES;
}
/*
#pragma标记-导航
-(iAction)browseBtn:(id)发送方
{
UIImagePickerController*imgpic=[[UIImagePickerController]
alloc]init];
imgpic.delegate=self;
imgpic.sourceType=UIImagePickerControllerSourceTypePhotoLibrary;
[自我呈现视图控制器:imgpic动画:是完成:无];
}
-(无效)imagePickerController:(UIImagePickerController*)选择器
didFinishPickingMediaWithInfo:(NSDictionary*)信息
{
UIImage*choose=info[UIImagePickerControllerOriginalImage];
self.imgView.image=choose;
[picker DismissionViewControllerInitiated:是完成:无];
}
-(iAction)保存单击:(id)发件人{
NSManagedObjectContext*上下文=[self-managedObjectContext];
if(self.userData){
//更新现有数据
[self.userData setValue:self.nameTxt.text forKey:@“name”];
[self.userData setValue:self.mobileTxt.text
forKey:@“mobileNumber”];
[self.userData setValue:self.emailIdTxt.text forKey:@“email”];
UIImage*sampleimage=\u imgView.image;
NSData*dataImage=UIImageJPEG表示法(sampleimage,1.0);
[self.userData setValue:dataImage-forKey:@“imageView”];
}否则{
//创建一个新的数据源
NSManagedObject*newDevice=[NSEntityDescription
insertNewObjectForEntityForName:@“详细信息”
inManagedObjectContext:context];
[newDevice setValue:self.nameTxt.text forKey:@“name”];
[新设备设置值:self.mobileTxt.text-forKey:@“mobileNumber”];
[新设备设置值:self.emailIdTxt.text forKey:@“email”];
UIImage*sampleimage=\u imgView.image;
NSData*dataImage=UIImageJPEG表示法(sampleimage,1.0);
[新设备设置值:dataImage forKey:@“imageView”];
}
n错误*错误=nil;
//将对象保存到持久存储
如果(![上下文保存:&错误]){
NSLog(@“无法保存!%@%@),错误,[错误本地化描述];
}
[自我解除视图控制器激活:是完成:无];
}
@结束
h

#导入
#进口
@界面详细信息视图控制器:
UIViewController
@属性(弱、非原子)IBOutlet UITextField*nameTxt;
@属性(弱、非原子)IBUitextField*mobileTxt;
@属性(弱、非原子)IBOutlet UITextField*emailIdTxt;
@属性(弱、非原子)IBUIImageView*imgView;
-(iAction)browseBtn:(id)发送方;
-(iAction)保存单击:(id)发件人;
@属性(强,非原子)NSManagedObject*userData;
@结束

适用于Swift 3:包括保存和检索数据

步骤1:添加框架

步骤2:添加数据模型

文件>新建>文件>核心数据>数据模型

  • 将文件命名为
    SampleData
    结果文件将是
    SampleData.xcdatamocelId
步骤3:将以下功能添加到您的应用程序代理中,并将“导入CoreData”添加到顶部

func applicationWillTerminate(_ application: UIApplication) {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    // Saves changes in the application's managed object context before the application terminates.
    self.saveContext()
}


// MARK: - Core Data stack

lazy var persistentContainer: NSPersistentContainer = {
    /*
     The persistent container for the application. This implementation
     creates and returns a container, having loaded the store for the
     application to it. This property is optional since there are legitimate
     error conditions that could cause the creation of the store to fail.
     */


    // SEE BELOW LINE OF CODE WHERE THE 'name' IS SET AS THE FILE NAME (SampleData) FOR THE CONTAINER

    let container = NSPersistentContainer(name: "SampleData")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            // Replace this implementation with code to handle the error appropriately.
            // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

            /*
             Typical reasons for an error here include:
             * The parent directory does not exist, cannot be created, or disallows writing.
             * The persistent store is not accessible, due to permissions or data protection when the device is locked.
             * The device is out of space.
             * The store could not be migrated to the current model version.
             Check the error message to determine what the actual problem was.
             */
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

// MARK: - Core Data Saving support

func saveContext () {
    let context = persistentContainer.viewContext
    if context.hasChanges {
        do {
            try context.save()
        } catch {
            // Replace this implementation with code to handle the error appropriately.
            // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            let nserror = error as NSError
            fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}
步骤4:向模型添加实体和属性

a) 添加实体

b) 添加属性

步骤5:保存数据

func saveItem(itemToSave: String){
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

//**Note:** Here we are providing the entityName **`Entity`** that we have added in the model
    let entity = NSEntityDescription.entity(forEntityName: "Entity", in: context)
    let myItem = NSManagedObject(entity: entity!, insertInto: context)

    myItem.setValue(itemToSave, forKey: "item")
    do {
        try context.save()
    }
    catch{
        print("There was an error in saving data")
    }
}
步骤5:检索数据

override func viewWillAppear(_ animated: Bool) {
    // Obtaining data from model
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")

    do {
        let results = try context.fetch(fetchRequest)
        let obtainedResults = results as! [NSManagedObject]
        let firstResult = obtainedResults[0]
        let myValue = firstResult.value(forKey: "item")

        print("myValue: \(myValue)")
    } catch {
        print("Error")
    }
}
覆盖函数视图将出现(u动画:Bool){
//从模型中获取数据
让上下文=(UIApplication.shared.delegate为!AppDelegate)。persistentContainer.viewContext
let fetchRequest=NSFetchRequest(entityName:“Entity”)
做{
let results=try context.fetch(fetchRequest)
设AcquiredResults=结果为![NSManagedObject]
设firstResult=AcquiredResults[0]
让myValue=firstResult.value(forKey:“项”)
打印(“myValue:\(myValue)”)
}抓住{
打印(“错误”)
}
}

那么,如何让托管上下文知道模型?自动?在AppDelegate.h中,applicationDoumentsDirectory方法应该返回NSURL而不是NSString。这是最好的答案!虽然我不是通过步骤4,而是通过
[[UIApplication sharedApplication]delegate]
检索到对AppDelegate的引用,然后通过
[AppDelegate managedObjectContext]
检索到上下文,但别忘了在AppDelegate.h文件中导入Coredata。如果
#import <CoreData/CoreData.h>
#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #import <CoreData/CoreData.h>
#endif
//replace the previous version of applicationWillTerminate with this
func applicationWillTerminate(application: UIApplication) {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    // Saves changes in the application's managed object context before the application terminates.
    self.saveContext()
}

func saveContext () {
    var error: NSError? = nil
    let managedObjectContext = self.managedObjectContext
    if managedObjectContext != nil {
        if managedObjectContext.hasChanges && !managedObjectContext.save(&error) {
            // Replace this implementation with code to handle the error appropriately.
            // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            //println("Unresolved error \(error), \(error.userInfo)")
            abort()
        }
    }
}

// #pragma mark - Core Data stack

// Returns the managed object context for the application.
// If the context doesn't already exist, it is created and bound to the persistent store coordinator for the application.
var managedObjectContext: NSManagedObjectContext {
    if !_managedObjectContext {
        let coordinator = self.persistentStoreCoordinator
        if coordinator != nil {
            _managedObjectContext = NSManagedObjectContext()
            _managedObjectContext!.persistentStoreCoordinator = coordinator
        }
    }
    return _managedObjectContext!
}
var _managedObjectContext: NSManagedObjectContext? = nil

// Returns the managed object model for the application.
// If the model doesn't already exist, it is created from the application's model.
var managedObjectModel: NSManagedObjectModel {
    if !_managedObjectModel {
        let modelURL = NSBundle.mainBundle().URLForResource("iOSSwiftOpenGLCamera", withExtension: "momd")
        _managedObjectModel = NSManagedObjectModel(contentsOfURL: modelURL)
    }
    return _managedObjectModel!
}
var _managedObjectModel: NSManagedObjectModel? = nil

// Returns the persistent store coordinator for the application.
// If the coordinator doesn't already exist, it is created and the application's store added to it.
var persistentStoreCoordinator: NSPersistentStoreCoordinator {
    if !_persistentStoreCoordinator {
        let storeURL = self.applicationDocumentsDirectory.URLByAppendingPathComponent("iOSSwiftOpenGLCamera.sqlite")
        var error: NSError? = nil
        _persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
        if _persistentStoreCoordinator!.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil, error: &error) == nil {
            /*
            Replace this implementation with code to handle the error appropriately.
            abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            Typical reasons for an error here include:
            * The persistent store is not accessible;
            * The schema for the persistent store is incompatible with current managed object model.
            Check the error message to determine what the actual problem was.
            If the persistent store is not accessible, there is typically something wrong with the file path. Often, a file URL is pointing into the application's resources directory instead of a writeable directory.
            If you encounter schema incompatibility errors during development, you can reduce their frequency by:
            * Simply deleting the existing store:
            NSFileManager.defaultManager().removeItemAtURL(storeURL, error: nil)
            * Performing automatic lightweight migration by passing the following dictionary as the options parameter:
            [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true}
            Lightweight migration will only work for a limited set of schema changes; consult "Core Data Model Versioning and Data Migration Programming Guide" for details.
            */
            //println("Unresolved error \(error), \(error.userInfo)")
            abort()
        }
    }
    return _persistentStoreCoordinator!
}
var _persistentStoreCoordinator: NSPersistentStoreCoordinator? = nil

// #pragma mark - Application's Documents directory

// Returns the URL to the application's Documents directory.
var applicationDocumentsDirectory: NSURL {
    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    return urls[urls.endIndex-1] as NSURL
}
 @property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
 @property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
 @property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

 - (NSURL *)applicationDocumentsDirectory; // nice to have to reference files for core data
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
- (void)saveContext{
    NSError *error = nil;
    NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
    if (managedObjectContext != nil) {
        if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) {
            NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
            abort();
        }
    }
}

- (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:@"NAMEOFYOURMODELHERE" withExtension:@"momd"];
    _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
    return _managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
    if (_persistentStoreCoordinator != nil) {
        return _persistentStoreCoordinator;
    }

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"NAMEOFYOURMODELHERE.sqlite"];

    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;
}

 #pragma mark - Application's Documents directory

// Returns the URL to the application's Documents directory.
- (NSURL *)applicationDocumentsDirectory{
    return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}
 let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate
 appDelegate.managedObjectContext
 [[[UIApplication sharedApplication] delegate] managedObjectContext];
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;
@synthesize managedObjectContext = _managedObjectContext;
ViewController.managedObjectContext = self.managedObjectContext;
@interface ViewController : UIViewController <NSFetchedResultsControllerDelegate> {
  NSFetchedResultsController *fetchedResultsController;
  NSManagedObjectContext *managedObjectContext;
}

 @property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@synthesize fetchedResultsController, managedObjectContext;
var managedObjectContext: NSManagedObjectContext

override  init() {
    // This resource is the same name as your xcdatamodeld contained in your project.
    guard let modelURL = NSBundle.mainBundle().URLForResource("A", withExtension:"momd") else {
        fatalError("Error loading model from bundle")
    }
    // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model.
    guard let mom = NSManagedObjectModel(contentsOfURL: modelURL) else {
        fatalError("Error initializing mom from: \(modelURL)")
    }
    let psc = NSPersistentStoreCoordinator(managedObjectModel: mom)
    self.managedObjectContext = NSManagedObjectContext(concurrencyType: .MainQueueConcurrencyType)
    self.managedObjectContext.persistentStoreCoordinator = psc

    let urls = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    let docURL = urls[urls.endIndex-1]
    /* The directory the application uses to store the Core Data store file.
    This code uses a file named "A.sqlite" in the application's documents directory.
    */
    let storeURL = docURL.URLByAppendingPathComponent("A.sqlite")
    do {
        try psc.addPersistentStoreWithType(NSSQLiteStoreType, configuration: nil, URL: storeURL, options: nil)
    } catch {
        fatalError("Error migrating store: \(error)")
    }

}
func seedPerson() {

        // create an instance of our managedObjectContext
        let moc = DataController().managedObjectContext

        // we set up our entity by selecting the entity and context that we're targeting
        let entity = NSEntityDescription.insertNewObjectForEntityForName("Bc", inManagedObjectContext: moc) as! Bc

        // add our data
        entity.setValue("Meera", forKey: "name")


        // we save our entity
        do {
            try moc.save()
        } catch {
            fatalError("Failure to save context: \(error)")
        }
    }
func fetch() {
        let moc = DataController().managedObjectContext
        let personFetch = NSFetchRequest(entityName: "Bc")

        do {
            let fetchedPerson = try moc.executeFetchRequest(personFetch) as! [Bc]
            print(fetchedPerson.first!.name!)

        } catch {
            fatalError("Failed to fetch person: \(error)")
        }
    }
+(void) insetPlusUpdate:(NSDictionary *)dataa {

    NSManagedObjectContext * context;

    if (![[NSThread currentThread] isMainThread]) {

        context = [[NSManagedObjectContext alloc] init];

        [context setPersistentStoreCoordinator:[APP_DELEGATE persistentStoreCoordinator]];
    } else {

        context = [APP_DELEGATE managedObjectContext];
    }

    NSFetchRequest * request = [[NSFetchRequest alloc] init];

    NSEntityDescription * entity = [NSEntityDescription entityForName:@"EntityName" inManagedObjectContext:context];

    [request setEntity:entity];

    NSPredicate * check = [NSPredicate predicateWithFormat:@"attribute == %@", Dict[@"key"]];

    [request setPredicate:check];

    NSError * error = nil;

    if ([context countForFetchRequest:request error:&error] == 0) {

Entity.attribute = @"";

    } else {


        NSArray * array = [context executeFetchRequest:request error:&error];

        EntityName * entity = [array firstObject];

  Entity.attribute = @"";

    }

}

+(NSString *)fetch:(NSString *)feed_id{

    NSManagedObjectContext * context;

    if(![[NSThread currentThread] isMainThread]){

        context = [[NSManagedObjectContext alloc] init];

        [context setPersistentStoreCoordinator:[APP_DELEGATE persistentStoreCoordinator]];

    } else {

        context = [APP_DELEGATE managedObjectContext];

    }

    NSFetchRequest * request = [[NSFetchRequest alloc] init];

    NSEntityDescription * entity = [NSEntityDescription entityForName:@"ENTITYNAME" inManagedObjectContext:context];

    [request setEntity:entity];

   NSPredicate * check = [NSPredicate predicateWithFormat:@"attribute == %@", Dict[@"key"]];

    [request setPredicate:check];

    NSError * error = nil;

    if ([context countForFetchRequest:request error:&error] > 0) {

        NSArray * array = [context executeFetchRequest:request error:&error];

        ENTITYNAME * fetchData = [array firstObject];

        NSString * string = fetchData.attribte[@"key"];

        return string;
    }

    return nil;
}


+(BOOL)delete{

    NSManagedObjectContext * context;

    if (![[NSThread currentThread] isMainThread]) {

        context = [[NSManagedObjectContext alloc] init];

        [context setPersistentStoreCoordinator:[APP_DELEGATE persistentStoreCoordinator]];

    } else {

        context = [APP_DELEGATE managedObjectContext];

    }

    NSFetchRequest * request = [[NSFetchRequest alloc] init];

    NSEntityDescription * entity = [NSEntityDescription entityForName:@"ENTITYNAME" inManagedObjectContext:context];

    [request setEntity:entity];

    NSError *error = nil;

    NSBatchDeleteRequest *deleteRequest = [[NSBatchDeleteRequest alloc] initWithFetchRequest: request];

    @try{

        [context executeRequest:deleteRequest error:&error];
        if([context save:&error]){

            NSLog(@"Deleted");

            return [context save:&error];

        }
        else{

            return [context save:&error];
        }

    }
    @catch(NSException *exception){

        NSLog(@"failed %@",exception);
        return [context save:&error];
    }    


}
#import "ViewController.h"
#import "DetailViewController.h"

 @interface ViewController ()
 {
  NSInteger indexPathvalue;
 }
 @end

  @implementation ViewController

 - (NSManagedObjectContext *)managedObjectContext {
     NSManagedObjectContext *context = nil;
     id delegate = [[UIApplication sharedApplication] delegate];
     if ([delegate performSelector:@selector(managedObjectContext)]) {
       context = [delegate managedObjectContext];
     }
   return context;
  }

  - (void)viewDidLoad {
      [super viewDidLoad];
  // Do any additional setup after loading the view, typically from a nib.
    NSLog(@"call this one2");
 }

 - (void)viewDidAppear:(BOOL)animated
 {
   [super viewDidAppear:animated];
   NSManagedObjectContext *managedObjectContext = [self 
   managedObjectContext];
   NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] 
   initWithEntityName:@"Details"];
   self.dataList = [[managedObjectContext executeFetchRequest:fetchRequest   
   error:nil] mutableCopy];
   [_coreDataList reloadData];

    NSLog(@"call this one");
 }
    #pragma mark - Table view data source

   - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
   {
     return 1;
   }

     - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:
   (NSInteger)section
    {
    return self.dataList.count;
    }

   - (UITableViewCell *)tableView:(UITableView *)tableView 
   cellForRowAtIndexPath:(NSIndexPath *)indexPath
   {
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView     
   dequeueReusableCellWithIdentifier:CellIdentifier];

     if (cell == nil)
    {
    cell = [[UITableViewCell   
    alloc]initWithStyle:UITableViewCellStyleSubtitle 
    reuseIdentifier:CellIdentifier];
    }

   NSManagedObject *user = [self.dataList objectAtIndex:indexPath.row];
   cell.textLabel.text = [user valueForKey:@"name"];
      cell.detailTextLabel.text = [user valueForKey:@"mobileNumber"];
    cell.imageView.image = [UIImage imageWithData:[user
    valueForKey:@"imageView"]]; 
    return cell;
    }


    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:
    (NSIndexPath *)indexPath
    {
    indexPathvalue = indexPath.row;
    [self performSegueWithIdentifier:@"detailView" sender:self];
    }

     - (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:
    (NSIndexPath *)indexPath
    {
     return YES;
     }
     - (void)tableView:(UITableView *)tableView commitEditingStyle:
      (UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:
     (NSIndexPath *)indexPath
    {
    NSManagedObjectContext *context = [self managedObjectContext];
    if (editingStyle == UITableViewCellEditingStyleDelete)
    {
    [context deleteObject:[self.dataList objectAtIndex:indexPath.row]];
    NSError *error = nil;
    if (![context save:&error]) {
        NSLog(@"Can't Delete! %@ %@", error, [error localizedDescription]);
        return;
    }
    [self.dataList removeObjectAtIndex:indexPath.row];
    [_coreDataList reloadData];

     }

    }
   - (void)didReceiveMemoryWarning {
   [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }

   - (IBAction)addBtnClick:(id)sender {
    }


    #pragma mark - Navigation

    // In a storyboard-based application, you will often want to do a little      
    - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
     {
   // Get the new view controller using [segue destinationViewController].
   // Pass the selected object to the new view controller.
    if ([segue.identifier isEqualToString:@"detailView"])
   {
    NSManagedObject *obj = [self.dataList objectAtIndex:indexPathvalue];
    DetailViewController *detail = segue.destinationViewController;
    detail.userData = obj;
    }

    }
   @end
       #import "DetailViewController.h"

       @interface DetailViewController ()

       @end

       @implementation DetailViewController

      - (NSManagedObjectContext *)managedObjectContext {
     NSManagedObjectContext *context = nil;
     id delegate = [[UIApplication sharedApplication] delegate];
     if ([delegate performSelector:@selector(managedObjectContext)]) {
    context = [delegate managedObjectContext];
     }
     return context;
    }

    - (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
     if (self.userData) {
    [self.nameTxt setText:[self.userData valueForKey:@"name"]];
    [self.mobileTxt setText:[self.userData valueForKey:@"mobileNumber"]];
    [self.emailIdTxt setText:[self.userData valueForKey:@"email"]];
    }
    }

     - (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
    }


   - (BOOL)textFieldShouldReturn:(UITextField *)textField
   {
    [textField resignFirstResponder];
    return YES;




}
     /*
    - (IBAction)saveBtnClick:(id)sender {

     NSManagedObjectContext *context = [self managedObjectContext];

     if (self.userData) {
    // Update existing data
    [self.userData setValue:self.nameTxt.text forKey:@"name"];
    [self.userData setValue:self.mobileTxt.text forKey:@"mobileNumber"];
    [self.userData setValue:self.emailIdTxt.text forKey:@"email"];
    UIImage *sampleimage = [UIImage imageNamed:@"icon.png"];
    NSData *dataImage = UIImageJPEGRepresentation(sampleimage, 1.0);
    [self.userData setValue:dataImage forKey:@"imageView"];

     } else {
    // Create a new data
    NSManagedObject *newDevice = [NSEntityDescription   
    insertNewObjectForEntityForName:@"Details" 
    inManagedObjectContext:context];
    [newDevice setValue:self.nameTxt.text forKey:@"name"];
    [newDevice setValue:self.mobileTxt.text forKey:@"mobileNumber"];
    [newDevice setValue:self.emailIdTxt.text forKey:@"email"];
    UIImage *sampleimage = [UIImage imageNamed:@"icon.png"];
    NSData *dataImage = UIImageJPEGRepresentation(sampleimage, 1.0);
    [newDevice setValue:dataImage forKey:@"imageView"];

     }

     NSError *error = nil;
    // Save the object to persistent store
     if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
    }

    [self dismissViewControllerAnimated:YES completion:nil];
    }
   @end
  #import <UIKit/UIKit.h>
  #import <CoreData/CoreData.h>

    @interface ViewController :  
    UIViewController<UITableViewDataSource,UITableViewDelegate>

   @property (weak, nonatomic) IBOutlet UITableView *coreDataList;
   - (IBAction)addBtnClick:(id)sender;
   @property (strong, nonatomic) NSMutableArray *dataList;
   @end
  #import <UIKit/UIKit.h>
  #import <CoreData/CoreData.h>

 @interface DetailViewController : UIViewController<UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *nameTxt;
@property (weak, nonatomic) IBOutlet UITextField *mobileTxt;
@property (weak, nonatomic) IBOutlet UITextField *emailIdTxt;
 - (IBAction)saveBtnClick:(id)sender;
@property (strong,nonatomic) NSManagedObject *userData;

@end
  - (void)viewDidLoad {
  [super viewDidLoad];
  // Do any additional setup after loading the view.
   if (self.userData) {
    [self.nameTxt setText:[self.userData valueForKey:@"name"]];
    [self.mobileTxt setText:[self.userData 
     valueForKey:@"mobileNumber"]];
    [self.emailIdTxt setText:[self.userData valueForKey:@"email"]];
    [self.imgView setImage:[UIImage imageWithData:[self.userData 
     valueForKey:@"imageView"]]];    }
        }

  - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
  }


  - (BOOL)textFieldShouldReturn:(UITextField *)textField
  {
   [textField resignFirstResponder];
return YES;
 }
  /*
  #pragma mark - Navigation



 - (IBAction)browseBtn:(id)sender
   {

  UIImagePickerController *imgpic =[[UIImagePickerController      
     alloc]init];     
  imgpic .delegate =self;
 imgpic .sourceType =UIImagePickerControllerSourceTypePhotoLibrary;
[self presentViewController:imgpic animated:YES completion:nil];

 }
 -(void)imagePickerController:(UIImagePickerController *)picker 
 didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
 {
  UIImage *choose = info[UIImagePickerControllerOriginalImage];
self.imgView.image=choose;
[picker dismissViewControllerAnimated:YES completion:nil];
}


  - (IBAction)saveBtnClick:(id)sender {

 NSManagedObjectContext *context = [self managedObjectContext];

 if (self.userData) {
    // Update existing data
    [self.userData setValue:self.nameTxt.text forKey:@"name"];
    [self.userData setValue:self.mobileTxt.text 
     forKey:@"mobileNumber"];        
   [self.userData setValue:self.emailIdTxt.text forKey:@"email"];

    UIImage *sampleimage = _imgView.image;
    NSData *dataImage = UIImageJPEGRepresentation(sampleimage, 1.0);
            [self.userData setValue:dataImage forKey:@"imageView"];

    } else {
    // Create a new data
    NSManagedObject *newDevice = [NSEntityDescription 
     insertNewObjectForEntityForName:@"Details" 
     inManagedObjectContext:context];
    [newDevice setValue:self.nameTxt.text forKey:@"name"];
    [newDevice setValue:self.mobileTxt.text forKey:@"mobileNumber"];
    [newDevice setValue:self.emailIdTxt.text forKey:@"email"];
    UIImage *sampleimage = _imgView.image;
    NSData *dataImage = UIImageJPEGRepresentation(sampleimage, 1.0);

    [newDevice setValue:dataImage forKey:@"imageView"];

  }

  NSError *error = nil;
 // Save the object to persistent store
 if (![context save:&error]) {
    NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
 }

 [self dismissViewControllerAnimated:YES completion:nil];
 }
   @end
 #import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>

 @interface DetailViewController :
 UIViewController<UITextFieldDelegate,UINavigationControllerDelegate,            
     UIIma
    gePickerControllerDelegate>
         @property (weak, nonatomic) IBOutlet UITextField *nameTxt;
  @property (weak, nonatomic) IBOutlet UITextField *mobileTxt;
 @property (weak, nonatomic) IBOutlet UITextField *emailIdTxt;
  @property (weak, nonatomic) IBOutlet UIImageView *imgView;
 - (IBAction)browseBtn:(id)sender;
 - (IBAction)saveBtnClick:(id)sender;
@property (strong,nonatomic) NSManagedObject *userData;

@end
func applicationWillTerminate(_ application: UIApplication) {
    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
    // Saves changes in the application's managed object context before the application terminates.
    self.saveContext()
}


// MARK: - Core Data stack

lazy var persistentContainer: NSPersistentContainer = {
    /*
     The persistent container for the application. This implementation
     creates and returns a container, having loaded the store for the
     application to it. This property is optional since there are legitimate
     error conditions that could cause the creation of the store to fail.
     */


    // SEE BELOW LINE OF CODE WHERE THE 'name' IS SET AS THE FILE NAME (SampleData) FOR THE CONTAINER

    let container = NSPersistentContainer(name: "SampleData")
    container.loadPersistentStores(completionHandler: { (storeDescription, error) in
        if let error = error as NSError? {
            // Replace this implementation with code to handle the error appropriately.
            // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.

            /*
             Typical reasons for an error here include:
             * The parent directory does not exist, cannot be created, or disallows writing.
             * The persistent store is not accessible, due to permissions or data protection when the device is locked.
             * The device is out of space.
             * The store could not be migrated to the current model version.
             Check the error message to determine what the actual problem was.
             */
            fatalError("Unresolved error \(error), \(error.userInfo)")
        }
    })
    return container
}()

// MARK: - Core Data Saving support

func saveContext () {
    let context = persistentContainer.viewContext
    if context.hasChanges {
        do {
            try context.save()
        } catch {
            // Replace this implementation with code to handle the error appropriately.
            // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
            let nserror = error as NSError
            fatalError("Unresolved error \(nserror), \(nserror.userInfo)")
        }
    }
}
func saveItem(itemToSave: String){
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext

//**Note:** Here we are providing the entityName **`Entity`** that we have added in the model
    let entity = NSEntityDescription.entity(forEntityName: "Entity", in: context)
    let myItem = NSManagedObject(entity: entity!, insertInto: context)

    myItem.setValue(itemToSave, forKey: "item")
    do {
        try context.save()
    }
    catch{
        print("There was an error in saving data")
    }
}
override func viewWillAppear(_ animated: Bool) {
    // Obtaining data from model
    let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext
    let fetchRequest = NSFetchRequest<NSFetchRequestResult>(entityName: "Entity")

    do {
        let results = try context.fetch(fetchRequest)
        let obtainedResults = results as! [NSManagedObject]
        let firstResult = obtainedResults[0]
        let myValue = firstResult.value(forKey: "item")

        print("myValue: \(myValue)")
    } catch {
        print("Error")
    }
}
 let alert  = UIAlertController(title:"Error", message: "No Internet Connection", preferredStyle: .alert)
            alert.addAction(UIAlertAction(title: "Ok", style: .default, handler: { (action) in}))
            alert.addAction(UIAlertAction(title: "Try Again", style: .default, handler: { (action) in
                self.networkCall(text: self.daySelected)
            }))
            self.present(alert, animated: false, completion: nil)