Ios 核心数据不保存
我有一个使用核心数据框架的应用程序,我对它相当陌生。当我输入有关“pilot”的信息并保存时,该实体的NSLog将返回null,我无法理解他们为什么不保存任何帮助Ios 核心数据不保存,ios,objective-c,core-data,nsmanagedobject,nslog,Ios,Objective C,Core Data,Nsmanagedobject,Nslog,我有一个使用核心数据框架的应用程序,我对它相当陌生。当我输入有关“pilot”的信息并保存时,该实体的NSLog将返回null,我无法理解他们为什么不保存任何帮助 #import <UIKit/UIKit.h> #import <CoreData/CoreData.h> #import <Foundation/Foundation.h> #import "Pilot.h" @interface PilotViewController : UIViewC
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import <Foundation/Foundation.h>
#import "Pilot.h"
@interface PilotViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate,UIPopoverControllerDelegate, ABPeoplePickerNavigationControllerDelegate>
@property (weak, nonatomic ) IBOutlet UITextField *nameField;
@property (weak, nonatomic ) IBOutlet UITextField *phoneField;
@property (weak, nonatomic ) IBOutlet UITextField *insuranceField;
@property (weak, nonatomic ) IBOutlet UITextField *emailField;
@property (strong ) NSManagedObject *pilot;
- (IBAction)cancel:(id)sender;
- (IBAction)save:(id)sender;
#import "PilotViewController.h"
@interface PilotViewController ()
@end
@implementation PilotViewController
@synthesize pilot;
#pragma mark Core Data Managed Object
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark Save and Cancel Buttons
- (IBAction)cancel:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
if (self.pilot) {
//Update existing pilot information
[self.pilot setValue:self.nameField.text forKey:@"pilotName"];
[self.pilot setValue:self.phoneField.text forKey:@"pilotPhone"];
[self.pilot setValue:self.insuranceField.text forKey:@"pilotInsurance"];
[self.pilot setValue:self.emailField.text forKey:@"pilotEmail"];
} else {
// Create a new managed object
NSManagedObject *newPilot = [NSEntityDescription insertNewObjectForEntityForName:@"Pilot" inManagedObjectContext:context];
[newPilot setValue:self.nameField.text forKey:@"pilotName"];
[newPilot setValue:self.phoneField.text forKey:@"pilotPhone"];
[newPilot setValue:self.insuranceField.text forKey:@"pilotInsurance"];
[newPilot setValue:self.emailField.text forKey:@"pilotEmail"];
{
NSString *pilotName = [pilot valueForKey:@"pilotName"];
NSLog( @"%@",pilotName);
//NSLog(@"Value of pilotName = %@",pilot);
}
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
#导入
#进口
#进口
#导入“Pilot.h”
@界面PilotViewController:UIViewController
@属性(弱,非原子)IBOutlet UITextField*nameField;
@属性(弱的,非原子的)ibuitextfield*phoneField;
@属性(弱、非原子)IBUITEXTFIELD*保险字段;
@属性(弱、非原子)IBOutlet UITextField*emailField;
@地产(强)NSManagedObject*试点;
-(iAction)取消:(id)发件人;
-(iAction)保存:(id)发送方;
#导入“PilotViewController.h”
@接口PilotViewController()
@结束
@实现PilotViewController
@综合飞行员;
#pragma标记核心数据管理对象
-(NSManagedObjectContext*)managedObjectContext{
NSManagedObjectContext*上下文=nil;
id delegate=[[UIApplication sharedApplication]delegate];
if([delegate performSelector:@selector(managedObjectContext)]){
上下文=[delegate managedObjectContext];
}
返回上下文;
}
-(id)initWithNibName:(NSString*)nibNameOrNil bundle:(NSBundle*)nibBundleOrNil
{
self=[super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
如果(自我){
//自定义初始化
}
回归自我;
}
-(无效)viewDidLoad
{
[超级视图下载];
//加载视图后执行任何其他设置。
}
-(无效)未收到记忆警告
{
[超级记忆警告];
//处置所有可以重新创建的资源。
}
#pragma标记保存和取消按钮
-(iAction)取消:(id)发件人{
[自我解除视图控制器激活:是完成:无];
}
-(iAction)保存:(id)发件人{
NSManagedObjectContext*上下文=[self-managedObjectContext];
if(自驾驶){
//更新现有飞行员信息
[self.pilot setValue:self.nameField.text forKey:@“pilotName”];
[self.pilot setValue:self.phoneField.text forKey:@“pilotPhone”];
[self.pilot设置值:self.insuranceField.text forKey:@“pilotInsurance”];
[self.pilot setValue:self.emailField.text forKey:@“pilotEmail”];
}否则{
//创建新的托管对象
NSManagedObject*newPilot=[NSEntityDescription insertNewObjectForEntityForName:@“Pilot”在ManagedObjectContext:context中];
[newPilot setValue:self.nameField.text forKey:@“pilotName”];
[newPilot setValue:self.phoneField.text forKey:@“pilotPhone”];
[newPilot setValue:self.insuranceField.text forKey:@“pilotInsurance”];
[newPilot setValue:self.emailField.text forKey:@“pilotEmail”];
{
NSString*pilotName=[pilotvalueforkey:@“pilotName]”;
NSLog(@“%@”,pilotName);
//NSLog(@“pilotName的值=%@”,pilot);
}
n错误*错误=nil;
//将对象保存到持久存储
如果(![上下文保存:&错误]){
NSLog(@“无法保存!%@%@),错误,[错误本地化描述];
[自我解除视图控制器激活:是完成:无];
}
}
}
@结束
您的托管对象上下文似乎为零。你为什么一开始就把它设为零?检索它的正确方法是确保将应用程序代理强制转换为您的应用程序代理:
AppDelegate *delegate = (AppDelegate*) [[UIApplication sharedApplication] delegate];
return delegate.manageObjectContext;
Apple推荐的模式不使用app delegate。您应该为类a
@property
指定上下文,并从演示视图控制器(例如在prepareForSegue
中)传递上下文。欢迎使用SOF。不鼓励使用代码“倾销”。你应该只发布你不确定的代码。我想你的意思是respondsToSelector
notperformSelector
。但是,我怀疑这能否解决您的问题。我们可以看看您在应用程序代理中设置托管对象上下文的位置吗?更改为respondsToSelector
非常重要,因为如果代理没有该选择器,而您尝试在代理上执行该选择器,则应用程序将崩溃。你会遇到一个坏家伙,-[AppDelegate managedObjectContext]:无法识别的选择器被发送到实例
因此,如果我有=nil,我应该让app委托代替?他们在哪里将上下文设置为nil?我看不出来。它们似乎只是在初始化ManagedObjectContext指针。此外,还不清楚他们是否在其托管对象上下文上设置了持久性。@user3927993否。您的问题没有什么意义。也许你在这件事上有点不知所措。