Iphone 核心数据随机崩溃
我完成了我的应用程序的开发,但在这一点上,当我试图在核心数据中保存图像时,我面临随机崩溃 以下是控制台消息:Iphone 核心数据随机崩溃,iphone,ios,core-data,nsmanagedobjectcontext,Iphone,Ios,Core Data,Nsmanagedobjectcontext,我完成了我的应用程序的开发,但在这一点上,当我试图在核心数据中保存图像时,我面临随机崩溃 以下是控制台消息: CoreData:错误:严重的应用程序错误。异常被捕获 在核心数据更改处理期间。这通常是一个内部错误 NSManagedObjectContextObjectsIDChangeNotification的观察者。 -[\u PFExternalReferenceData compare:]:发送到实例0x94b69b0的无法识别的选择器带有userInfo(null) 问题在于它是不确定的
CoreData:错误:严重的应用程序错误。异常被捕获 在核心数据更改处理期间。这通常是一个内部错误 NSManagedObjectContextObjectsIDChangeNotification的观察者。 -[\u PFExternalReferenceData compare:]:发送到实例0x94b69b0的无法识别的选择器带有userInfo(null) 问题在于它是不确定的。5次中或多或少会发生一次 有人知道我应该去哪里找吗 编辑: 下面是我的类代码,它似乎提出了一个问题。当我单击“保存”按钮调用-(iAction)saveResultingImage时,有时会发生这种情况:
#import "ResultViewController.h"
@interface ResultViewController ()
@property (nonatomic)BOOL resultSaved;
@end
@implementation ResultViewController
#pragma mark - IBActions
- (IBAction)saveResultingImage
{
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, NO, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
_resultImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
_resultSaved = [self saveOnCoreData];
[self performSegueWithIdentifier:@"BackToStartSegue" sender:self];
}
- (IBAction)discardWithoutSaving
{
[self performSegueWithIdentifier:@"BackToStartSegue" sender:self];
}
- (IBAction)restartDrawing:(id)sender
{
UIImage *backgroundImage = _subImage;
UIImageView *imageView =
[[UIImageView alloc] initWithFrame:CGRectMake(0, 0, backgroundImage.size.width, backgroundImage.size.height)];
imageView.image = backgroundImage;
[self.view addSubview:imageView];
UIImage *maskImage = _maskImage;
CGRect maskViewRect = CGRectMake(0, 0, maskImage.size.width, maskImage.size.height);
ImageMaskView *subView = [[ImageMaskView alloc] initWithFrame:maskViewRect image:maskImage];
[self.view addSubview:subView];
}
- (IBAction)showExplainVC
{
[self performSegueWithIdentifier:@"ShowInfoSegue" sender:self];
}
#pragma mark - Methods
- (BOOL)saveOnCoreData
{
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *newMeme =
[NSEntityDescription insertNewObjectForEntityForName:@"Meme" inManagedObjectContext:context];
NSData *toSaveMeme = UIImagePNGRepresentation(_resultImage);
[newMeme setValue:toSaveMeme forKey:@"image"];
NSError *error = nil;
if (![context save:&error]) {
DebugLog(@"Can't save: %@ %@", error, [error localizedDescription]);
return NO;
}
return YES;
}
#pragma mark - View Controller LifeCycle
- (BOOL)shouldPerformSegueWithIdentifier:(NSString *)identifier sender:(id)sender
{
if ([identifier isEqualToString:@"BackToStartSegue"]) {
return _resultSaved;
}
return _resultSaved;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO];
DebugLog(@"Called viewWillAppear");
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
UIBarButtonItem *discardBarButtonItem =
[[UIBarButtonItem alloc] initWithTitle:@"Discard" style:UIBarButtonItemStylePlain target:self action:@selector(discardWithoutSaving)];
UIBarButtonItem *saveBarButtonItem =
[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(saveResultingImage)];
UIBarButtonItem *infoBarButton =
[[UIBarButtonItem alloc] initWithTitle:@"How to" style:UIBarButtonItemStylePlain target:self action:@selector(showExplainVC)];
discardBarButtonItem.style = UIBarButtonItemStyleBordered;
self.navigationItem.rightBarButtonItems = @[saveBarButtonItem, discardBarButtonItem, infoBarButton];
self.view.backgroundColor = [UIColor blackColor];
[self restartDrawing:nil];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
#pragma mark - Core Data Stack
- (NSManagedObjectContext *)managedObjectContext
{
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
@end
感谢您表现出兴趣:-)发布您的代码。。所以,任何人都可以说,要改变什么,你能如何更好地利用它们没有人知道我应该去哪里?我仍然被这个问题困扰着,保存时随机崩溃…只需注释这一行,然后再次运行代码<代码>[self-PerformsgueWithIdentifier:@“BackToStartSegue”发送方:self]代码>我认为您正在执行一些操作,在
视图中执行将出现在视图控制器中。这可能会引起一个问题。请在尝试后与我联系,并发现仍有一些随机崩溃发生。您好,我在ViewWillAppeal中所做的只是将导航栏设置为可见(因为在上一个viewController中它被设置为不可见),然后将其设置为黑色。当我按下save(保存)按钮时,我会执行该序列,该按钮链接到-(iAction)saveResultingImage,然后调用performSegue。当我点击“放弃”按钮时,我也会调用perform segue,直接进入我的应用程序的第一个屏幕。我对这两个都发表了评论,并玩了我的应用程序。它在第三次崩溃时再次出现以下错误消息:CoreData:error:severy application error。在核心数据更改处理期间捕获异常。这通常是NSManagedObjectContextObjectsIDChangeNotification的观察者中的错误-[\u PFExternalReferenceData compare::]:无法识别的选择器发送到实例0x94cfcfcff0,userInfo(null)2013-07-30 22:10:17.000 MemeGen[43615:c07]***由于未捕获的异常“NSInvalidArgumentException”,终止应用程序,原因:'-[\u PFExternalReferenceData compare:]:发送到实例0x94cfcf0'***第一次抛出调用堆栈的选择器无法识别:(0x1c96012 0x18f1e7e 0x1d214bd。。。